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中的$PATH
variables; 添加了以下行:
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 pip
和which 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/pip
和bin/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”可执行文件 – pip
, pip3
和pip3.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主要原因,也不能给出正确的答案。 看起来有多种可能的原因。
不过,我希望我能帮助分享我的观察和解决方法。
-
pyvenv
与--system-site-packages
-
./bin
不包含pip
,pip
可从系统站点包中获得 - 软件包全球安装( BUG? )
-
-
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
现在一切都像魅力一样。