virtualenv 不包含 pip

新手上路,请多包涵

我正在尝试在 Mac OS X El Capitan 上使用 virtualenv 创建一个虚拟环境。 I have installed Python 2.7.11 with brew , which includes pip , wheel and setuptools by default.

然而,当我按照 文档 或任何其他资源中的说明尝试安装 virtualenv 时,我遇到了几个问题:

  1. virtualenv executable is not placed in /usr/local/bin after pip makes its job, so I need to ln -s it by hand (it may indicate,这一步安装有问题)。
  2. After I run virtualenv venv , it creates new environment, catches Python 2.7.11 from brew -installation, but: _there is no pip inside bin 文件夹_。 That means, that if I try which pip , having venv activated, it returns a global position of pip/usr/local/bin/pip , not /path/to/venv/bin/pip

As a consequence, installing packages inside venv uses global pip and installs them to a global sites-packages , not that inside venv , and it’s与环境应该做的完全相反。

您能否建议可能出了什么问题以及如何解决?

编辑:值得一提的是,我以前在我的计算机上安装了其他版本的 Python,我最近删除了它,如 本答案 中所述。也许它会导致问题,需要进行更彻底的清洁。

原文由 mikeonly 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 505
2 个回答

尝试删除或重命名主目录中的 .pydistutils.cfg 文件,例如重命名为 mv ~/.pydistutils.cfg ~/oldpydistutils.cfg

我在这里给出了一个详细的答案来帮助其他人,但最初的功劳归于 这个答案。如果您知道 .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. 检查点位置:运行 (env)$ which pip 输出 /usr/local/bin/pip (不期望)

要检查我们的包去了哪里,我们可以尝试在虚拟环境中安装一个包:

  1. 尝试安装一个包: (env)$ pip install HTTPServer 成功
  2. 尝试运行包: (env)$ python -m HTTPServer 失败并出现错误 /Users/emunsing/env/bin/python: No module named HTTPServer
  3. 要仔细检查,请再次尝试安装: (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 upgradebrew install python --build-from-source 中描述的使用 p-ip-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 文件似乎解决了这个问题:虽然这个文件是由自制软件安装创建的,但这个文件中的 一些设置可能与 virtualenv 不兼容。虽然删除此文件对我的系统没有任何不良影响,但在使用 pip 将软件包安装到全局环境时,您可能需要使用 --user 标志(例如 $ pip install --user HTTPServer )。如果您想根据自己的需要对其进行定制,这里有更多 关于 .pydistutils.cfg 的详细信息。

原文由 emunsing 发布,翻译遵循 CC BY-SA 3.0 许可协议

  1. virtualenv executable is not placed in /usr/local/bin after pip makes its job, so I need to ln -s it by hand (it may indicate,这一步安装有问题)。

不要那样做。那只会隐藏错误并不能解决问题。以下是如何调试此类问题的简短指南:

  • 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 的输出以确保您拥有最新版本。

原文由 cel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题