Python virtualenv不包括pip

Python virtualenv不包括pip,python,pip,virtualenv,Python,Pip,Virtualenv,我正试图在Mac OS X El Capitan上使用virtualenv创建一个虚拟环境。我已经用brew安装了Python 2.7.11,默认情况下包括pip、wheel和setuptools Hovewer,当我尝试在中或从任何其他资源安装virtualenv以下说明时,我遇到了几个问题: pip完成其工作后,virtualenv可执行文件未放置在/usr/local/bin中,因此我需要手动ln-s它(这可能表明此步骤的安装有问题) 运行virtualenv venv后,它会创建新的环境

我正试图在Mac OS X El Capitan上使用
virtualenv
创建一个虚拟环境。我已经用
brew
安装了Python 2.7.11,默认情况下包括
pip
wheel
setuptools

Hovewer,当我尝试在中或从任何其他资源安装
virtualenv
以下说明时,我遇到了几个问题:

  • pip
    完成其工作后,
    virtualenv
    可执行文件未放置在
    /usr/local/bin
    中,因此我需要手动
    ln-s
    它(这可能表明此步骤的安装有问题)
  • 运行
    virtualenv venv
    后,它会创建新的环境,从
    brew
    -安装中捕获Python 2.7.11,但是:
    bin
    文件夹中没有
    pip
    。这意味着,如果我尝试
    哪个pip
    ,激活
    venv
    ,它将返回
    pip
    -
    /usr/local/bin/pip
    ,而不是
    /path/to/venv/bin/pip
  • 因此,在
    venv
    内部安装软件包使用全局
    pip
    ,并将它们安装到全局
    站点软件包中,而不是安装在
    venv
    内部,这与环境应该做的恰恰相反

    你能告诉我哪里出了问题以及如何解决吗

    编辑:值得一提的是,我曾经在我的计算机上安装过其他版本的Python,我最近删除了它。可能是它导致了问题,需要进行更彻底的清洁

  • pip
    完成其工作后,
    virtualenv
    可执行文件未放置在
    /usr/local/bin
    中,因此我需要手动
    ln-s
    它(这可能表明此步骤的安装有问题)
  • 不要那样做。这只会隐藏错误,而不会解决问题。以下是如何调试此类问题的简短指南:

    • 从python的
      开始。您看到的第一个路径应该是
      /usr/local/bin/python
      ,如果不是,请检查
      path
      变量

    • 接下来,检查
      哪个-a pip
      。同样,第一条路径应该是
      /usr/local/bin/pip
      。如果没有,请运行python-m ensurepip
    并重新检查

  • 现在使用
    pip install virtualenv
    安装
    virtualenv
    ,然后检查
    which-a virtualenv
    的输出。第一个路径应该是
    /usr/local/bin/virtualenv
    ,如果不是,请检查
    env | grep PYTHON
    的输出是否有意外的环境变量

  • 最后检查
    virtualenv--version
    的输出,确保您拥有最新版本


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

    我在这里给出了一个详细的答案,以帮助其他人,但最初的功劳归于。如果您知道.pydistutils.cfg中的具体原因,请告诉我

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

    我是如何在我的机器上诊断的:

  • 我使用
    $virtualenv env
  • 使用
    $source env/bin/activate激活虚拟环境
  • 选中的python位置:运行
    (env)$which python
    ,输出
    /Users//env/bin/python
    (如预期)
  • 选中的pip位置:运行
    (env)$哪个pip
    ,输出
    /usr/local/bin/pip
    (不需要)
  • 要检查软件包的去向,我们可以尝试在虚拟环境中安装软件包:

  • 尝试安装一个软件包:
    (env)$pip install HTTPServer
    ,安装成功
  • 尝试运行包:
    (env)$python-mhttpserver
    ,该包失败,出现错误
    /Users/emunsing/env/bin/python:没有名为HTTPServer的模块
  • 若要仔细检查,请再次尝试安装:
    (env)$pip install HTTPServer
    ,它产生的
    要求已得到满足(使用--升级以升级):HTTPServer in/usr/local/lib/python2.7/站点包
  • 仔细检查,我们发现环境的/bin文件夹中没有Pip:

    $ls环境/垃圾箱
    激活activate.fish python python2
    activate.csh activate_this.python config python2.7

    因此,当系统找到本地python版本时,它无法找到本地pip来使用并遍历$PATH。它最终使用了/usr/local/bin中的pip,使我无法在虚拟环境中本地安装软件包

    以下是我尝试过的: -重新安装python
    brew卸载python
    ,然后进行
    brew升级
    brew安装python——从源代码构建
    -安装pip

    以下是我排除的情况: -我没有使用
    sudopip…
    ,在这个Python/pip安装中也没有这样做过 -我的虚拟环境没有显示pip的本地安装,就像这些类似问题一样:

    最终,我发现消除
    ~/.pydistutils.cfg
    文件解决了这个问题,允许新的虚拟环境具有自己的本地pip。我的
    ~/.pydistutils.cfg
    文件的内容是:

    [global]
    verbose=1
    
    [install]
    install-scripts=$HOME/bin
    
    [easy_install]
    install-scripts=$HOME/bin
    
    简单地重命名
    ~/.pydistutils.cfg
    文件似乎可以解决问题:尽管此文件是由自制安装创建的。虽然删除此文件对我的系统没有任何不良影响,但您可能需要在