安装Lion后出现Python虚拟环境错误

26 投票
9 回答
32434 浏览
提问于 2025-04-16 23:02

我有一段时间没用过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 个回答

6

你有没有为你正在使用的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)来安装。

22

我在安装了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

41

我对Python和Virtualenv完全是个新手。不过,我遇到了和你一样的问题,找到了解决办法。我觉得这个问题的解决方式可能会因为你最开始设置Python和Virtualenv的方式而有所不同。

在我的情况下,升级到Lion系统后,我的/Library/Python/2.*/site-packages文件夹里的所有内容都被完全清空了,但那些已经坏掉的可执行文件(它们链接到这个文件夹的内容)还留在/usr/local/bin里。我认为这就是导致那些神秘的“No module”导入错误的根本原因。

查看我的.bash_history,我最开始是用easy_install来安装pip,然后用pip来安装virtualenvvirtualenvwrapper。当我重复这些步骤后,我就能重新进入我之前的虚拟环境,这些环境里还保留着我在10.6上安装的所有包。不过要注意,10.6默认是Python 2.6。如果你的包需要Python 2.6,你应该先把默认的Python版本改成2.6。

具体步骤如下:

  1. 我从我的shell启动脚本(比如.bash_profile)中删除了旧的Virtualenv配置命令。然后开启一个新的终端会话。
  2. (可选)选择你想使用的Python版本,比如:
    defaults write com.apple.versioner.python Version 2.6
  3. sudo easy_install pip。看起来/Library/Python/2.*/site-packages现在需要管理员权限。我不记得在10.6时是这样的(或者至少我的bash历史没有反映出这一点)。
  4. sudo pip install virtualenv
  5. sudo pip install virtualenvwrapper
  6. 最后,我重新启用了在第一步中禁用的那些virtualenv配置命令。新的终端会话里一切都恢复到原来的样子(可以用pip freeze -l查看这个虚拟环境里的本地包)。我想是这样的。

撰写回答