IPython的sys.path与Python的不同

7 投票
3 回答
4210 浏览
提问于 2025-04-18 03:40

我一般使用IPython,最近才发现普通的Python命令行中导入模块的搜索路径不对。根据我的理解,sys.path是从PYTHONPATH继承过来的(虽然我不知道PYTHONPATH具体在哪里),那么在IPython中是不是有所不同呢?我有点担心这会影响到安装的包。例如,我刚刚尝试了

pip install --upgrade gensim

但是失败了,因为它无法找到scipy这个依赖,而我已经安装了它。

所以我深入研究了一下,发现IPython中

import gensim
gensim.__version__

返回的是 .9.1

而在普通的Python中

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']

3 个回答

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,看看那里的导入情况,可能会帮助你找到问题到底出在哪里。

3

可能对你来说已经太晚了,但这里的答案也许对你有帮助:ipython读取错误的python版本。简单来说,ipython这个脚本可以直接指向一个特定的python程序,而不是你直接运行python时得到的那个。

撰写回答