pip安装在全球网站包,而不是virtualenv

使用pip在virtualenv中安装软件包会导致将软件包安装在全局site-packages文件夹中,而不是在virtualenv文件夹中。 以下是我如何在OS X Mavericks(10.9.1)上设置Python3和virtualenv:

我使用Homebrew安装了python3:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" brew install python3 --with-brewed-openssl 

更改.bash_profile中的$PATHvariables; 添加了以下行:

 export PATH=/usr/local/bin:$PATH 

运行which python3返回/usr/local/bin/python3 (在重新启动shell之后)。

注意: which python3仍然返回/ usr/bin/python

使用pip3安装virtualenv:

 pip3 install virtualenv 

接下来,创build一个新的virtualenv并激活它:

 virtualenv testpy3 -p python3 cd testpy3 source bin/activate 

注意:如果我没有指定-p python3,则virtualenv中的bin文件夹中将缺lesspip。

运行which pipwhich pip3都返回virtualenv文件夹:

 /Users/kristof/VirtualEnvs/testpy3/bin/pip3 

现在,当我尝试在激活的virtualenv中使用pip安装例如Markdown时,pip将安装在全局site-packages文件夹中,而不是virtualenv的site-packages文件夹中。

 pip install markdown 

运行pip list返回:

 Markdown (2.3.1) pip (1.4.1) setuptools (2.0.1) virtualenv (1.11) 

/Users/kristof/VirtualEnvs/testpy3/lib/python3.3/site-packages内容:

 __pycache__/ _markerlib/ easy_install.py pip/ pip-1.5.dist-info/ pkg_resources.py setuptools/ setuptools-2.0.2.dist-info/ 

/usr/local/lib/python3.3/site-packages内容:

 Markdown-2.3.1-py3.3.egg-info/ __pycache__/ easy-install.pth markdown/ pip-1.4.1-py3.3.egg/ setuptools-2.0.1-py3.3.egg setuptools.pth virtualenv-1.11-py3.3.egg-info/ virtualenv.py virtualenv_support/ 

正如你所看到的, 全球网站包文件夹包含Markdown,而virtualenv文件夹则不包含。

注意:我之前在不同的VM上安装了Python2和Python3(按照这些说明进行操作),并且与Python3有相同的问题; 然而,在基于Python2的virtualenv中安装软件包的工作完美无缺。

任何提示,提示,…将非常感激。

有趣的是,你提出这个问题,我只是有同样的问题。 我最终解决了这个问题,但是我还不确定是什么原因造成的。

试着检查你的bin/pipbin/activate脚本。 在bin/pip ,看看shebang。 这是对的吗? 如果没有,纠正它。 然后在你的bin/activate的〜42行上,检查你的virtualenvpath是否正确。 它会看起来像这样

 VIRTUAL_ENV="/Users/me/path/to/virtual/environment" 

如果错了,纠正它,然后deactivate . bin/activate . bin/activate ,如果我们的相互问题有同样的原因,它应该工作。 如果还是不行的话,无论如何你都是在正确的轨道上。 我像你一样经历了相同的解决问题的程序,一遍又一遍地跟着堆栈跟踪等。

确保这一点

 /Users/kristof/VirtualEnvs/testpy3/bin/pip3 

是你想要的,而不是指另一个类似命名的testing项目(我有这个问题,不知道它是如何开始的,我怀疑是同时运行多个virtualenvs)。

如果这些都行不通的话,乔霍洛威说,

只需运行virtualenv的pip及其完整path(即不要依赖search可执行path),甚至不需要激活环境。 它会做正确的事情。

也许不理想,但它应该在一个紧要关头。

链接到我原来的问题:

VirtualEnv / Pip尝试全局安装软件包

对我来说,这不是一个点子或virtualenv问题。 这是一个python问题。 在线教程后,我在〜/ .bash_profile(或〜/ .bashrc)中手动设置了我的$ PYTHONPATH。 这个手动设置的$ PYTHONPATH在virtualenv中可用,因为它可能应该被允许。

另外add2virtualenv没有添加我的项目path到我的$ PYTHONPATH由于某种原因在virtualenv。

只是一些分叉的人仍然可能被卡住! 干杯!

我也有这个问题。 在我的Mavericks Mac上的Python 3.3虚拟环境中的/bin目录中调用pip install <package_name> ,导致Python包安装在Python 2.7全局站点包目录中。 尽pipe我的$ PATH从包含pip的目录开始。 奇怪的。 这在CentOS上不会发生。 对我来说,解决scheme是调用pip3而不是pip 。 当我通过ez_setup在虚拟环境中安装了pip时 ,在/bin目录中安装了三个“pip”可执行文件 – pippip3pip3.3 。 奇怪的是,这三个文件完全一样。 调用pip3 install <package_name>导致Python包正确安装到本地site-packages目录中。 在虚拟环境中调用具有完整path名称的pip也是正确的。 我有兴趣知道为什么我的Mac没有像我期望的那样使用$ PATH。

我从virtualenv中安装python包时遇到了同样的问题。 我的情况根本原因是不同的。 从virtualenv,我(在Ubuntu的习惯出来),做:

 sudo easy_install -Z <package> 

这导致bin / pip shebang被忽略,它使用root的非virtualenv python将其安装到全局站点包中。 由于我们有一个虚拟的环境,我们应该安装没有“sudo”

更新到pip==8.0.0后,我遇到了类似的问题。 只好求助于debuggingpip来追踪不良的path。

事实certificate,我的个人资料目录有一个distutilsconfiguration文件,有一些空的path值。 这导致所有的软件包被安装到相同的根目录,而不是相应的虚拟环境(在我的情况下/lib/site-packages )。

我不确定如何configuration文件到达那里,或者它是如何有空值,但它更新点后开始。

如果任何人遇到同样的问题,只要删除文件~/.pydistutils.cfg (或删除空的configurationpath)就可以修复我的环境中的问题,因为pip回到默认的分布式configuration。

今天遇到同样的问题。 我只是用sudo easy_install pip (OSX / Max)重新安装了pip,然后用sudo virtualenv nameOfVEnv再次创build了我的virtualenv。 然后激活新的virtualenv后, pip命令按预期工作。

我不认为我在第一个virtualenv创作中使用了sudo ,这可能是没有从virtualenv访问pip的原因,我可以在这个修复之前访问pip2 ,虽然这很奇怪。

首先要检查的是哪个位置pipparsing为:

 which pip 

如果你在一个virtualenv你会期望这给你像这样的东西:

/path/to/virtualenv/.name_of_virtualenv/bin/pip

但是,由于某种原因,它可能会解决您的系统点。 例如,你可能在你的virtualenv中看到这个(这是不好的):

/ usr / local / bin / pip(或者不在你的virtualenvpath中的任何东西)。

要解决这个问题请检查你的pipconfig:

 ~/.pipconf ~/.conf/pip /etc/pip.conf 

并确保没有任何东西强迫你的Pythonpath或你的点子path(这解决了我)。

然后尝试开始一个新的terminal并重build你的virtualenv(删除然后再次创build它)

以下是在使用虚拟环境时可以避免头痛的一些做法

  • 为您的项目创build一个文件夹。
  • 在这个文件夹中创build你的Virtualenv项目。
  • 激活项目环境后,请勿使用“ sudo pip安装包 ”。
  • 完成工作后,请始终“ 停用 ”您的环境。
  • 避免重命名你的项目文件夹。

为了更好地表示这种做法,下面是一个模拟:

为您的项目/环境创build一个文件夹

 $ mkdir venv 

创造环境

 $ cd venv/ $ virtualenv google_drive New python executable in google_drive/bin/python Installing setuptools, pip...done. 

激活环境

 $ source google_drive/bin/activate 

安装软件包

 (google_drive) $ pip install PyDrive Downloading/unpacking PyDrive Downloading PyDrive-1.3.1-py2-none-any.whl ... ... ... Successfully installed PyDrive PyYAML google-api-python-client oauth2client six uritemplate httplib2 pyasn1 rsa pyasn1-modules Cleaning up... 

环境中可用的包

 (google_drive) $ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> import pydrive.auth >>> >>> gdrive = pydrive.auth.GoogleAuth() >>> 

停用环境

 (google_drive) $ deactivate $ 

在环境外包装不可用

 (google_drive) $ python Python 2.7.6 (default, Oct 26 2016, 20:32:10) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> import pydrive.auth Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named pydrive.auth >>> 

笔记:

为什么不sudo?

Virtualenv为您创build一个全新的环境,定义$ PATH和其他一些variables和设置。 当你使用sudo pip安装包的时候 ,你以root用户身份运行Virtualenv,转义创build的整个环境,然后在全局站点包上安装这个包, 而不是在你有一个虚拟环境的项目文件夹中。激活了环境。

如果您重命名项目的文件夹(如接受的答案中所述)…

…你将不得不从项目的bin目录中的一些文件中调整一些variables。

例如:

bin / pip,第1行(She Bang)

bin / activate,第42行(VIRTUAL_ENV)

我也有这个问题。 调用sudo pip install导致Python软件包被安装在全局站点包diretory中,并且调用pip install只能正常工作。 所以不要在virtualenv中使用sudo

同样的问题。 从Linux rpm安装的Python3.5和pip 8.0.2。

我没有find主要原因,也不能给出正确的答案。 看起来有多种可能的原因。

不过,我希望我能帮助分享我的观察和解决方法。

  1. pyvenv--system-site-packages

    • ./bin不包含pippip可从系统站点包中获得
    • 软件包全球安装( BUG?
  2. pyvenv没有--system-site-packages

    • pip被安装到./bin ,但它是一个不同的版本(来自ensurepip
    • 包安装在虚拟环境中( OK

使用--system-site-packages pyvenv明显的解决方法:

  • 创build它没有--system-site-packages选项
  • pyvenv.cfg文件pyvenv.cfg include-system-site-packages = false更改为true

还有一点值得检查一下,你没有修改virtualenv的path。

在这种情况下, bin/pip的第一行(以及其他可执行文件)将具有不正确的path。

您可以编辑这些文件并修复path,也可以删除并重新安装virtualenv。

对于Python 3ers

尝试更新。 我有这个完全相同的问题,并尝试追逐的答案,但没有成功。 重构这个最快捷的方法是尽可能地更新你的Python Minor / Patch版本。 我注意到我正在运行3.5.1并更新到3.5.2。 Pyvenv再次工作。

我有这个问题。 事实certificate,我的文件夹名称中有一个导致问题的空间。 我删除了空间,使用venv删除和重新使用,一切都很好。

创build一个virtualenv实例,然后更改父文件夹名称时,会发生此问题。

我有同样的问题,我通过删除venv目录并重新创build它解决它!

 deactivate (if venv is activated first deactivate it) rm -rf venv virtualenv -p python3 venv . ENV/bin/activate pip3 install -r requirements.txt 

现在一切都像魅力一样。