virtualenv不包括pip

时间:2015-12-29 02:45:21

标签: python pip virtualenv

我正在尝试在Mac OS X El Capitan上使用virtualenv创建虚拟环境。我已经安装了带有brew的Python 2.7.11,默认情况下包括pipwheelsetuptools

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

    virtualenv完成工作后,
  1. /usr/local/bin可执行文件未放置在pip中,因此我需要手动ln -s(它可能表示存在错误安装在此步骤)。
  2. 运行virtualenv venv后,它会创建新环境,从brew - 安装中捕获Python 2.7.11,但是: pip内没有bin。这意味着,如果我尝试which pip,激活venv,则会返回全球排名pip - /usr/local/bin/pip,而不是/path/to/venv/bin/pip
  3. 因此,在venv内安装软件包会使用全局pip并将其安装到全局sites-packages,而不是安装在venv内,并且它们相当与环境应该做的相反。

    请问您可能会建议可能出现的问题以及如何解决问题?

    编辑:要提到的是我曾经在我的计算机上安装了其他版本的Python,我最近删除了它,因为它描述为in this answer。也许它会导致问题,需要进行更彻底的清洁。

3 个答案:

答案 0 :(得分:13)

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

重命名

我在这里提供了一个详细的答案来帮助其他人,但最初的功劳归于this answer。如果您知道.pydistutils.cfg中的具体问题,请告诉我们!

我遇到了同样的问题:我的虚拟环境是在没有pip的本地副本的情况下创建的,尽管它们有python的本地副本。这意味着在安装到全局包位置的虚拟环境中使用$ pip,并且环境的python不可见。

我如何在我的机器上诊断出这个:

  1. 我使用$ virtualenv env
  2. 创建了一个虚拟环境
  3. 使用$ source env/bin/activate
  4. 激活虚拟环境
  5. 检查python位置:使用输出(env)$ which python运行/Users/<username>/env/bin/python(正如预期的那样)
  6. 检查点子位置:使用输出(env)$ which pip运行/usr/local/bin/pip(不是预期的)
  7. 要检查我们的软件包的去向,我们可以尝试在虚拟环境中安装软件包:

    1. 尝试安装一个包:(env)$ pip install HTTPServer成功
    2. 尝试运行程序包:(env)$ python -m HTTPServer,但失败并显示错误/Users/emunsing/env/bin/python: No module named HTTPServer
    3. 要仔细检查,请尝试重新安装:生成(env)$ pip install HTTPServer
    4. 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 upgradebrew 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 WindowsThis 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完成工作后,
  1. /usr/local/bin可执行文件未放置在pip中,因此我需要手动ln -s(它可能表示存在错误安装在此步骤上。)
  2.   
不要这样做。这只会隐藏错误而不能解决问题。以下是如何调试此类问题的简短指南:

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