我正在尝试在Mac OS X El Capitan上使用virtualenv
创建虚拟环境。我已经安装了带有brew
的Python 2.7.11,默认情况下包括pip
,wheel
和setuptools
。
Hovewer,当我尝试按照documentation或任何其他资源中的说明安装virtualenv
时,我遇到了几个问题:
virtualenv
完成工作后,/usr/local/bin
可执行文件未放置在pip
中,因此我需要手动ln -s
(它可能表示存在错误安装在此步骤)。 virtualenv venv
后,它会创建新环境,从brew
- 安装中捕获Python 2.7.11,但是: pip
内没有bin
夹。这意味着,如果我尝试which pip
,激活venv
,则会返回全球排名pip
- /usr/local/bin/pip
,而不是/path/to/venv/bin/pip
。因此,在venv
内安装软件包会使用全局pip
并将其安装到全局sites-packages
,而不是安装在venv
内,并且它们相当与环境应该做的相反。
请问您可能会建议可能出现的问题以及如何解决问题?
编辑:要提到的是我曾经在我的计算机上安装了其他版本的Python,我最近删除了它,因为它描述为in this answer。也许它会导致问题,需要进行更彻底的清洁。
答案 0 :(得分:13)
尝试删除或重命名主目录中的.pydistutils.cfg文件,例如通过使用mv ~/.pydistutils.cfg ~/oldpydistutils.cfg
我在这里提供了一个详细的答案来帮助其他人,但最初的功劳归于this answer。如果您知道.pydistutils.cfg中的具体问题,请告诉我们!
我遇到了同样的问题:我的虚拟环境是在没有pip的本地副本的情况下创建的,尽管它们有python的本地副本。这意味着在安装到全局包位置的虚拟环境中使用$ pip
,并且环境的python不可见。
我如何在我的机器上诊断出这个:
$ virtualenv env
$ source env/bin/activate
(env)$ which python
运行/Users/<username>/env/bin/python
(正如预期的那样)(env)$ which pip
运行/usr/local/bin/pip
(不是预期的)要检查我们的软件包的去向,我们可以尝试在虚拟环境中安装软件包:
(env)$ pip install HTTPServer
成功(env)$ python -m HTTPServer
,但失败并显示错误/Users/emunsing/env/bin/python: No module named HTTPServer
(env)$ pip install HTTPServer
Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages
醇>
仔细检查,我们发现环境&ps / bin文件夹中没有Pip:
$ ls env/bin
activate activate.fish python python2
activate.csh activate_this.py python-config python2.7
因此,当系统找到本地python版本时,它无法找到要使用的本地点并遍历$ PATH。它最终使用了来自/ usr / local / bin的pip,使我无法在本地将软件包安装到虚拟环境中。
这是我尝试过的:
- 重新安装python brew uninstall python
后跟brew upgrade
和brew install python --build-from-source
- 安装pip using the get-pip.py command as described in the Pip documentation
这是我排除的:
- 我没有使用sudo pip ...
which caused similar problems in this other question,并且在此Python / pip安装的任何时候都没有这样做
- 我的虚拟环境没有显示pip的本地安装,就像这些类似问题中的情况一样:This one for Windows,This one for Mac OS X。
最终,我发现消除~/.pydistutils.cfg
文件解决了问题,允许新的虚拟环境拥有自己的本地点。我~/.pydistutils.cfg
文件的内容是:
[global]
verbose=1
[install]
install-scripts=$HOME/bin
[easy_install]
install-scripts=$HOME/bin
只需重命名~/.pydistutils.cfg
文件即可解决问题:虽然此文件是由自制软件安装some settings in this file may be incompatible with virtualenv创建的。虽然删除此文件对我的系统没有任何不良影响,但在将pip包安装到全局环境(例如--user
)时,可能需要使用$ pip install --user HTTPServer
标志。如果您想根据自己的需要定制它,可以使用details on .pydistutils.cfg。
答案 1 :(得分:1)
运行virtualenv时出现问题:“导入错误:没有名为pip的模块。” 我的解决方案是降级virtualenv。我有16.2.0。 pip卸载virtualenv pip install virtualenv == 15.1.0
答案 2 :(得分:0)
不要这样做。这只会隐藏错误而不能解决问题。以下是如何调试此类问题的简短指南:在
virtualenv
完成工作后,- 醇>
/usr/local/bin
可执行文件未放置在pip
中,因此我需要手动ln -s
(它可能表示存在错误安装在此步骤上。)
从which -a python
开始。您看到的第一个路径应为/usr/local/bin/python
,如果没有,请检查您的PATH
变量。
接下来,检查which -a pip
。第一条路径应该是/usr/local/bin/pip
。如果没有,请运行python -m ensurepip
并重新检查。
现在使用virtualenv
安装pip install virtualenv
,之后检查which -a virtualenv
的输出。第一个路径应该是/usr/local/bin/virtualenv
,如果没有检查env |grep PYTHON
的输出是否有意外的环境变量。
最后检查virtualenv --version
的输出以确保您拥有最新版本。