为什么在OS X上升级Python后出现ImportError: No module named pkg_resources?
我刚在我的Mac上更新了Python到2.6.4版本。
我是通过dmg包安装的。
安装后,似乎没有正确设置我的Python路径,所以我在.bash_profile
文件中添加了'/usr/local/lib/python2.6/site-packages'
。
>>> pprint.pprint(sys.path)
['',
'/Users/Bryan/work/django-trunk',
'/usr/local/lib/python2.6/site-packages',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages']
显然,这并不是所有需要的路径,因为我无法运行iPython。
$ ipython
Traceback (most recent call last):
File "/usr/local/bin/ipython", line 5, in <module>
from pkg_resources import load_entry_point
ImportError: No module named `pkg_resources`
我在谷歌上搜索过,但还是搞不清楚怎么安装pkg_resources
或者确保它在路径上。
我需要做些什么来解决这个问题呢?
10 个回答
如果你在Mac OS 10.7上升级了Python,但发现pkg_resources不工作,最简单的解决办法就是重新安装setuptools,就像Ned上面提到的那样。
sudo pip install setuptools --upgrade
or sudo easy_install install setuptools --upgrade
我遇到了同样的ImportError
错误。我的Python环境中不知怎么就把setuptools
这个包删掉了。
要解决这个问题,可以运行setuptools
的安装脚本:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python
如果你有任何版本的distribute
,或者任何setuptools
版本低于0.6,你需要先把它卸载掉。
想了解更多细节,可以查看安装说明。
* 如果你已经有一个能正常工作的distribute
,把它升级到一个“兼容包装器”会更简单,这样就能切换到setuptools
了。不过如果现在已经出问题了,就别尝试这样做。
[更新] 简单来说,pkg_resources
是由 Distribute 或 setuptools 提供的。
[更新 2] 在2013年的PyCon大会上宣布,Distribute
和 setuptools
项目已经重新合并。现在 Distribute
已经不再使用,你应该直接使用最新的 setuptools
。可以试试这个:
curl -O https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
python ez_setup.py
或者,更好的是,使用当前的 pip
,它是一个高级接口,底层会使用 setuptools
。
[针对提问者具体问题的详细回答]:
你在问题中没有说明,但我假设你是从苹果自带的Python(10.5上的2.5或10.6上的2.6.1)升级过来的,或者是从python.org的Python 2.5升级的。在这些情况下,重要的一点是每个Python实例都有自己的库,包括自己的site-packages库,这里是安装额外包的地方。(顺便说一下,它们默认都不使用 /usr/local/lib
。)这意味着你需要为新的Python 2.6安装所需的额外包。最简单的方法是先确保新的python2.6在你的搜索 $PATH
中排在最前面(也就是说,输入 python2.6
时能正常调用它);python2.6的安装程序应该已经修改了你的 .bash_profile
,把它的框架bin目录放在了 $PATH
的最前面。然后按照那里的说明使用 setuptools 安装 easy_install
。这个步骤也会自动安装 pkg_resources
模块。
接着,使用新安装的 easy_install
(或 pip
)来安装 ipython
。
easy_install ipython
或者
pip install ipython
它应该会自动安装到该Python实例的正确 site-packages
位置,这样你就可以正常使用了。