尝试删除或重命名主目录中的.pydistutils.cfg文件,例如使用
mv ~/.pydistutils.cfg ~/oldpydistutils.cfg
进行重命名。
我在这里提供了详细的答案来帮助其他人,但最初的荣誉归功于
this answer。如果您知道.pydistutils.cfg中具体引起问题的内容,请告诉我!
我遇到了同样的问题:我的虚拟环境创建时没有本地的pip副本,尽管它们有本地的python副本。这意味着在虚拟环境中使用
$ pip
会安装到全局包位置,并且对环境的python不可见。
我如何在我的机器上诊断此问题:
1. 我使用
$ virtualenv env
创建了一个虚拟环境。
2. 使用
$ source env/bin/activate
激活虚拟环境。
3. 检查Python位置:运行命令
(env)$ which python
,输出结果为
/Users/<username>/env/bin/python
(预期结果)。
4. 检查pip位置:运行命令
(env)$ which pip
,输出结果为
/usr/local/bin/pip
(非预期结果)。
为了检查包的安装位置,我们可以尝试在虚拟环境中安装一个包:
5. 尝试安装包:
(env)$ pip install HTTPServer
,成功安装。
6. 尝试运行包:
(env)$ python -m HTTPServer
,失败并显示错误信息:
/Users/emunsing/env/bin/python: No module named HTTPServer
。
7. 为了再次确认,尝试重新安装:
(env)$ pip install HTTPServer
,结果显示
Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages
。
仔细检查后,我们发现环境的/bin文件夹中没有Pip:
$ ls env/bin
activate activate.fish python python2
activate.csh activate_this.py python-config python2.7
因此,尽管系统找到了本地Python版本,但无法找到可用的本地Pip并遍历$PATH。它最终使用了/usr/local/bin中的Pip,导致我无法在虚拟环境中本地安装软件包。
以下是我的尝试:
- 重新安装Python brew uninstall python
然后执行 brew upgrade
和 brew install python --build-from-source
- 安装Pip 使用Pip文档中描述的get-pip.py命令
这是我排除的原因:
- 我没有使用
sudo pip ...
,
这会导致其他问题的类似情况,并且从未在此Python/pip安装中这样做过。
- 我的虚拟环境未显示pip的本地安装,就像这些类似问题一样:
Windows上的这一个,
Mac OS X上的这一个。
最终,我发现消除
~/.pydistutils.cfg
文件可以解决问题,允许新的虚拟环境具有自己的本地pip。我的
~/.pydistutils.cfg
文件内容如下:
[global]
verbose=1
[install]
install-scripts=$HOME/bin
[easy_install]
install-scripts=$HOME/bin
只需将~/.pydistutils.cfg
文件重命名即可解决问题:似乎尽管此文件由homebrew安装创建,但其中的某些设置可能与virtualenv不兼容。 尽管删除此文件对我的系统没有产生任何负面影响,但您可能需要在使用pip向全局环境安装软件包时使用--user
标志(例如$ pip install --user HTTPServer
)。 如果您想要调整文件以满足自己的需求,这里有更多.pydistutils.cfg的详细信息。
virtualenv
的时候使用了sudo
命令吗?也许它以某种用户私有的方式安装,这可能会导致问题。(例如,在安装期间无法将二进制文件放置在PATH
等位置) - millimoosesudo
两种方式,结果都一样。这不太可能是权限问题,因为可以使用virtualenv.py
从源代码本地安装。从tarball中使用virtualenv.py
也奇怪地无法运行pip
。 - mikeonly