在使用已安装的Python 2.7,在OS X 10.8上使用Homebrew时,无法通过pip安装virtualenv。

9

在使用Homebrew安装Python后尝试安装virtualenv时,我遇到了以下错误:

$ pip install virtualenv
Requirement already satisfied (use --upgrade to upgrade): \
  virtualenv in /Library/Python/2.7/site-packages/virtualenv-1.9.1-py2.7.egg
Cleaning up...

很明显,pip在查找时进入了系统python文件夹而不是位于/usr/local的brewed文件夹。我该如何避免这种情况?

brew doctor未发现任何问题,并且路径优先级设置正确。

我尝试从系统python中删除virtualenv包,以便使用brewed pip安装virtualenv。但是,我无法创建虚拟环境,因为出现了以下错误:

$ virtualenv datatransfer/
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2603, in <module>
    working_set.require(__requires__)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 666, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 565, in resolve
    raise DistributionNotFound(req)  # XXX put more info here
pkg_resources.DistributionNotFound: virtualenv==1.9.1

所以我没有成功避免使用系统虚拟环境。

我做错了什么?


请查看此维基页面:https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python。它解释了如何编辑您的PYTHONPATH和PATH,以便您的系统首先找到酿造的Python。 - SethMMorton
@SethMMorton PATH已经正确,PYTHONPATH为空。我在这个wiki中看到的是,brewed python也会在/Library/Python/2.7/site-packages寻找模块。但是,使用系统命令在那个文件夹中创建的虚拟环境会使用brewed python吗? - RogerFC
当您键入 which pythonwhich pip 时会发生什么? - SethMMorton
@SethMMorton,已安装的Python和pip位于/usr/local/bin目录下。 - RogerFC
很不幸,我现在无法重现这个问题,因此我无法将任何答案标记为正确。 - RogerFC
@SethMMorton分享的URL已被替换为https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Homebrew-and-Python.md。 - Bouke
5个回答

19

我曾经有同样的问题,通过卸载任何brew版本的Python和virtualenv,我设法解决了它

brew uninstall python
brew uninstall pyenv-virtualenv

将我在/usr/local/bin下找到的所有virtualenv*文件手动移动到另一个文件夹中。

sudo mkdir /usr/local/bin/venv-old
sudo mv /usr/local/bin/virtualenv* /usr/local/bin/venv-old/

打开一个新的终端标签并仔细检查我是否处于干净的状态

which python # => /usr/bin/python
which virtualenv # => virtualenv not found

按照推荐的方法(这里这里)清洁地安装 Python 和 virtualenv(wrapper):

brew install python --with-brewed-openssl
# Open a new terminal tab now (to access /usr/local/bin/python)
pip install virtualenv
pip install virtualenvwrapper

这是我找到的最稳定的解决方案,而且不需要 sudo 重新安装任何东西。谢谢! - Geekfish
如果像在我的系统上一样,即使运行了“pip uninstall virtualenv”后,“/usr/local/bin/virtualenv”仍然存在,那么似乎您可以手动删除“/usr/local/bin/virtualenv”,然后“pip install”提供的virtualenv版本将成功运行。 - npdoty
是的,这就是为什么我建议将所有 /usr/local/bin/virtualenv* 的东西移动到一个新文件夹中。我不喜欢永久删除我的 home 文件夹之外的任何东西,因为你永远不知道哪个系统实用程序可能依赖它。 - metakermit

4

我曾经遇到过同样的问题,

对于我来说,

sudo mv /usr/local/bin/virtualenv* /usr/local/bin/venv-old/

这一步操作是关键,

pip install -I virtualenv

而不需要卸载并重新安装Python。


1
我有同样的问题,并在谷歌小组上找到了解决方案。 似乎 /usr/local/bin/virtualenv 没有更新,因此如果您打开它,您会看到对旧版本 virtualenv 1.9.1 的引用,而您的系统已安装了更新版本。

所以,您只需要打开 /usr/local/bin/virtualenv 并将其替换为:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from virtualenv import main

if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

这对我有用!

来源:https://groups.google.com/forum/#!topic/python-virtualenv/hL_QDPJsnuY


这对我有用!实际上,我有一个非常旧的virtualenv脚本,由于某种原因无法卸载。 - gabe

1
我遇到的问题是在我的$HOME目录中有.pydistutils.cfg,这迫使我不得不使用sudo pip install <package>。如果你必须使用sudo通过pip安装软件包,则说明你做错了,并且需要立即开始排除系统故障;否则一切都将失败,而你也不会知道原因。运行brew doctor会警告你有关.pydistutils.cfg文件的信息,因此在对系统进行核心更改后,不要忘记监视该命令的状态。我花了很长时间才找到这个问题,但现在一切都好了。这真的帮了我很多

0

我发现,与你不同的是,根据brew doctor的说法,我的路径是错误的。但即使我纠正了这个问题(考虑到你的描述,这并不奇怪),我仍然遇到了问题,所以我卸载了virtualenv,然后重新安装,但这次使用sudo,sudo pip install virtualenv

这解决了问题,这表明我要么有另一个与系统配置有关的问题,要么有比我多一小时Python经验的人能指出为什么它不好(我认为这与全局安装被认为是一种不好的做法有关)。

Seth在which方面有些想法,似乎你和我看到的一样,

〜 which python的结果是/usr/local/bin/python

〜 ls -l /usr/local/bin/python给我_permissions_etc_ /usr/local/bin/python -> ../Cellar/python/2.7.5/bin/python

Pip

which pip指向/usr/local/bin/pip

ls -l /usr/local/bin/pip 显示 _permissions_etc_ /usr/local/bin/pip -> ../Cellar/python/2.7.5/bin/pip

Virtualenv(在sudo pip install之前没有输出)

which virtualenv/usr/local/bin/virtualenv

ls -l /usr/local/bin/virtualenv 显示 _permissions_etc_ /usr/local/bin/virtualenv

当我创建并使用virtualenv时,我会得到以下结果:

workon ve_test
which python
/Users/_username_/.virtualenvs/ve_test/bin/python
(ve_test)➜  ~PIP_VIRTUALENV_BASE  python --version
Python 2.7.5

顺便提一下,我的.zshrc文件包含以下内容:

# Python related
# http://hackercodex.com/guide/python-virtualenv-on-mac-osx-mountain-lion-10.8/
# http://docs.python-guide.org/en/latest/dev/virtualenvs.html
source /usr/local/bin/virtualenvwrapper.sh
# virtualenv should use Distribute instead of legacy setuptools
export VIRTUALENV_DISTRIBUTE=true
# Centralized location for new virtual environments
export PIP_VIRTUALENV_BASE=$HOME/Projects/PythonVirtualEnv
# cache pip-installed packages to avoid re-downloading
export PIP_DOWNLOAD_CACHE=$HOME/.pip/cache

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