安装Lion后出现Python虚拟环境错误
我有一段时间没用过Python和virtualenv了,我记得我在我的MacBook Pro上设置过virtualenv和pip,但现在完全忘了这些东西是怎么用的。
在安装了Lion系统后,每次我打开一个新的终端窗口时,就会出现这个错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named virtualenvwrapper.hook_loader
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenv has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is set properly.
有没有什么建议可以解决这个问题吗?
我尝试了:
easy_install eventlet
结果是这样的:
Traceback (most recent call last):
File "/usr/local/bin/easy_install", line 5, in <module>
from pkg_resources import load_entry_point
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 2607, in <module>
parse_requirements(__requires__), Environment()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/pkg_resources.py", line 565, in resolve
raise DistributionNotFound(req) # XXX put more info here
pkg_resources.DistributionNotFound: setuptools==0.6c11
9 个回答
你有没有为你正在使用的Python安装virtualenv
?如果你用的是苹果自带的系统Python 2.7,它是没有预装virtualenv
这个工具的。你可以用/usr/bin/easy_install
来安装它。
更新一下:为了更清楚,Lion 10.7系统现在自带的Python 2.7是默认版本,当你使用/usr/bin/python
时就是这个版本。苹果还继续在Lion中提供Python 2.6和2.5,就像在10.6的Snow Leopard中一样。你可以通过明确指定版本来选择想用的版本,比如/usr/bin/python2.7
、/usr/bin/python2.6
等等,你也可以更改/usr/bin/python
使用的默认版本;具体细节可以查看苹果的手册(man python
)。不过关键是,通常情况下,Python的包是安装到特定版本上的。如果你为2.6安装了某个东西,想在2.7上用的话,就需要用python2.7(或者easy_install-2.7
)来安装。
我在安装了python3.4的Ubuntu 14.04上,解决问题的方法是把一些内容添加到~/.bashrc文件里,结果这个文件的最后部分看起来像这样:
#Setup virtual envwrapper for python in case default doesn't work
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4
export VIRTUALENVWRAPPER_PYTHON
# needed for virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/projects
source /usr/local/bin/virtualenvwrapper.sh
当我在普通的python(2.7版本)上运行pip freeze
时,它显示安装的包是正确的,但还是有一些警告。尽管有警告,虚拟环境还是能正常工作。
后来,我通过确保~/.virtualenvs文件夹里的所有文件都属于我的用户和组,而不是一些文件归属于root用户,解决了这些警告。具体操作是这样的:
bash
cd ~
sudo chown -R ubuntu:ubuntu .virtualenvs
我对Python和Virtualenv完全是个新手。不过,我遇到了和你一样的问题,找到了解决办法。我觉得这个问题的解决方式可能会因为你最开始设置Python和Virtualenv的方式而有所不同。
在我的情况下,升级到Lion系统后,我的/Library/Python/2.*/site-packages
文件夹里的所有内容都被完全清空了,但那些已经坏掉的可执行文件(它们链接到这个文件夹的内容)还留在/usr/local/bin
里。我认为这就是导致那些神秘的“No module”导入错误的根本原因。
查看我的.bash_history,我最开始是用easy_install
来安装pip
,然后用pip
来安装virtualenv
和virtualenvwrapper
。当我重复这些步骤后,我就能重新进入我之前的虚拟环境,这些环境里还保留着我在10.6上安装的所有包。不过要注意,10.6默认是Python 2.6。如果你的包需要Python 2.6,你应该先把默认的Python版本改成2.6。
具体步骤如下:
- 我从我的shell启动脚本(比如
.bash_profile
)中删除了旧的Virtualenv配置命令。然后开启一个新的终端会话。 - (可选)选择你想使用的Python版本,比如:
defaults write com.apple.versioner.python Version 2.6
sudo easy_install pip
。看起来/Library/Python/2.*/site-packages
现在需要管理员权限。我不记得在10.6时是这样的(或者至少我的bash历史没有反映出这一点)。sudo pip install virtualenv
sudo pip install virtualenvwrapper
- 最后,我重新启用了在第一步中禁用的那些virtualenv配置命令。新的终端会话里一切都恢复到原来的样子(可以用
pip freeze -l
查看这个虚拟环境里的本地包)。我想是这样的。