IPython 的 sys.path 与 Python 的 sys.path 不同

7

我通常使用IPython,最近才注意到在普通的python shell中,导入模块的搜索路径是错误的。据我所知,sys.path继承自PYTHONPATH(尽管我不知道PYTHONPATH位于哪里),在IPython中是否不同?我担心这会影响安装。例如,我刚刚尝试了

pip install --upgrade gensim

由于无法解决已经安装的scipy依赖项,导致该操作失败。因此我深入研究,并在Ipython中找到了以下内容。

import gensim
gensim.__version__

在Python中,返回值为 .9.1。

import gensim
gensim.__version__

返回 .8.9

以下是 Ipython 版本的 sys.path 的样子:

['',
    '/Users/change/anaconda/bin',
    '/Users/change/anaconda/lib/python2.7/site-packages/pybing-0.12-py2.7.egg',
    '/Users/change/anaconda/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg',
    '/Users/change/anaconda/python.app/Contents/lib/python27.zip',
    '/Users/change/anaconda/python.app/Contents/lib/python2.7',
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-darwin',
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-mac',
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-mac/lib-scriptpackages',
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-tk',
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-old',
    '/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-dynload',
    '/Users/change/anaconda/lib/python2.7/site-packages',
    '/Users/change/anaconda/lib/python2.7/site-packages/PIL',
    '/Users/change/anaconda/lib/python2.7/site-packages/pygoogle',
    '/Users/change/anaconda/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info',
    '/Users/change/anaconda/lib/python2.7/site-packages/IPython/extensions']

还有常规的Python脚本sys.path:

['',
'/Users/change/anaconda/lib/python2.7/site-packages/pybing-0.12-py2.7.egg',
'/Users/change/anaconda/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg',
'/Users/change/anaconda/lib/python27.zip',
'/Users/change/anaconda/lib/python2.7',
'/Users/change/anaconda/lib/python2.7/plat-darwin',
'/Users/change/anaconda/lib/python2.7/plat-mac',
'/Users/change/anaconda/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/change/anaconda/lib/python2.7/lib-tk',
'/Users/change/anaconda/lib/python2.7/lib-old',
'/Users/change/anaconda/lib/python2.7/lib-dynload',
'/Users/change/anaconda/lib/python2.7/site-packages',
'/Users/change/anaconda/lib/python2.7/site-packages/PIL',
'/Users/change/anaconda/lib/python2.7/site-packages/pygoogle',
'/Users/change/anaconda/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']

有关sys.path如何工作的更多信息,请参见此答案https://dev59.com/InNA5IYBdhLWcg3wmfIa#38403654 - djhaskin987
3个回答

3

也许现在对你来说已经晚了,但这里的答案也许可以帮助到你:ipython reads wrong python version。基本上,ipython脚本可以直接引用特定的python二进制文件,而不是直接运行python所得到的那个。


你链接下面的第一条评论帮了我。 - scottlittle

0

你可能已经激活了虚拟环境,它忽略了系统路径。

可以通过在终端中运行以下命令来解决此问题(在关闭笔记本电脑等之后):

virtualenv --system-site-packages ~

0

我在我的Mac上安装了一个brew版本的Python。由于某种原因,它无法使用系统库。通过执行brew uninstall python之后,它又可以正常工作了,因为默认的Python切换回了/usr/bin/python。

此外,尝试使用which pythonwhich ipython命令,并打开/usr/bin/python、/usr/local/bin/python、/usr/bin/ipython和/usr/local/bin/ipython文件,在那里进行导入操作,可能有助于找出问题所在。


在Mac上设置sys.pathsys.executable时会出现奇怪的问题,因为它必须猜测实际的Python可执行文件在哪里;DARWIN不会将整个Python路径传递给自己。 :( - djhaskin987

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接