pip 安装在全局站点包而不是 virtualenv
Posted
技术标签:
【中文标题】pip 安装在全局站点包而不是 virtualenv【英文标题】:pip installing in global site-packages instead of virtualenv 【发布时间】:2014-01-24 00:34:33 【问题描述】:使用pip3
在virtualenv
中安装包会导致该包安装在全局站点包文件夹中,而不是安装在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
变量;添加以下行:
export PATH=/usr/local/bin:$PATH
运行which python3
返回/usr/local/bin/python3
(在重新启动shell 之后)。
注意:which python3
仍然返回 /usr/bin/python
。
使用pip3
安装virtualenv
:
pip3 install virtualenv
接下来,创建一个新的virtualenv
并激活它:
virtualenv testpy3 -p python3
cd testpy3
source bin/activate
注意:如果我不指定 -p python3,则 virtualenv 中的 bin 文件夹中将缺少 pip。
运行 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/
如您所见,global site-packages 文件夹包含 Markdown,而 virtualenv 文件夹不包含。
注意:我之前在不同的 VM 上安装了 Python2 和 Python3(遵循these 指令)并且在 Python3 上遇到了同样的问题;不过,在基于 Python2 的 virtualenv 中安装包可以完美运行。
任何提示、提示……将不胜感激。
【问题讨论】:
pip 不会安装已经可用的包。您应该在其输出中看到“要求已经满足”。尝试安装您还没有的软件包。顺便说一句,pip3 可能使用非 brew python3(你如何安装pip3
?)。它本身可能并不坏,但如果是的话,你应该知道。
我之前没有安装 Markdown。全局包列表为空。不管我尝试什么包,我每次都可以重现这种行为。
关于 pip3:这是由自制软件和 Python3 一起安装的。
对我来说这也有帮助:***.com/questions/14695278/… 仅供参考
【参考方案1】:
我也有这个问题。调用sudo pip install
导致Python 包安装在全局站点包目录中,调用pip install
工作正常。
所以在 virtualenv 中不要使用 sudo。
【讨论】:
或者如果你使用sudo,你也必须激活虚拟环境。sudo su
后跟 <venv>/bin/activate
后跟 pip install
。【参考方案2】:
我在从 virtualenv 中安装 python 包时遇到了同样的问题。 我的根本原因是不同的。 在 virtualenv 中,我(在 Ubuntu 上不习惯)正在做:
sudo easy_install -Z <package>
这导致 bin/pip shebang 被忽略,它使用 root 的非 virtualenv python 将其安装在全局站点包中。 由于我们有一个虚拟环境,我们应该安装没有“sudo”的包
【讨论】:
【参考方案3】:对我来说,这不是 pip 或 virtualenv 问题。这是一个python问题。在在线学习了一些教程之后,我在 ~/.bash_profile(或 ~/.bashrc)中手动设置了我的 $PYTHONPATH。这个手动设置的 $PYTHONPATH 在 virtualenv 中是可用的,因为它可能应该被允许。
另外,add2virtualenv
没有在 virtualenv 中将我的项目路径添加到我的 $PYTHONPATH 中。
只是为那些可能仍被卡住的人提供了一些分岔路!干杯!
【讨论】:
谢谢!对我来说,这是由 ros 设置脚本引起的:source /opt/ros/melodic/setup.bash
【参考方案4】:
我也有这个问题。在我的 Mavericks Mac 上的 Python 3.3 虚拟环境中从 /bin
目录调用 pip install <package_name>
会导致 Python 包安装在 Python 2.7 全局站点包目录中。尽管我的 $PATH 是从包含pip
的目录开始的。诡异的。这不会发生在 CentOS 上。对我来说,解决方案是调用pip3
而不是pip
。当我通过 ez_setup 在虚拟环境中安装 pip 时,三个“pip”可执行文件已安装在 /bin
目录中 - pip
、pip3
和pip3.3
。奇怪的是,这三个文件完全一样。调用 pip3 install <package_name>
会导致 Python 包正确安装到本地站点包目录中。在虚拟环境中使用完整路径名调用pip
也可以正常工作。我很想知道为什么我的 Mac 没有像我期望的那样使用 $PATH。
【讨论】:
【参考方案5】:有趣的是,您提出了这个问题,我也遇到了完全相同的问题。我最终解决了它,但我仍然不确定是什么原因造成的。
尝试检查您的 bin/pip
和 bin/activate
脚本。在bin/pip
,看看shebang。这是正确的吗?如果不是,请纠正它。然后在bin/activate
中的~42
线上,检查你的virtualenv 路径是否正确。它看起来像这样
VIRTUAL_ENV="/Users/me/path/to/virtual/environment"
如果有问题,请更正,deactivate
,然后是. bin/activate
,如果我们共同的问题有相同的原因,它应该可以工作。如果它仍然没有,无论如何,你在正确的轨道上。我经历了和你一样的问题解决程序,一遍又一遍地which pip
ing,跟踪堆栈跟踪等等。
绝对确定
/Users/kristof/VirtualEnvs/testpy3/bin/pip3
是你想要的,而不是指另一个同名的测试项目(我遇到了这个问题,不知道它是如何开始的。我怀疑是同时运行多个 virtualenvs)。
如果这些都不起作用,那么临时解决方案可能是,正如乔·霍洛威所说,
只需使用完整路径运行 virtualenv 的 pip(即不要依赖搜索可执行路径),您甚至不需要激活环境。它会做正确的事。
也许不理想,但它应该在紧要关头工作。
链接到我原来的问题:
VirtualEnv/Pip trying to install packages globally
【讨论】:
谢谢蔡斯。在发布我的问题之前,我遇到了你的问题,但似乎我跳过了提到 shebang 的最后一行。事实上,它被设置为#!/usr/local/bin/python3.3
而不是#!/Users/kristof/VirtualEnvs/testpy3/bin/python3.3
。我更改了它,激活了 virtualenv 并安装了 Markdown 包。 Pip 现在安装在 virtualenv 站点包文件夹而不是全局文件夹中。
我也遇到了这个问题,非常感谢您的回答。我注意到了shebangs,然后立即发现了这个问题,证实了我的怀疑。有谁知道为什么shebang错了?最好能找到一个永久修复,这样我们就不必在每次创建新的虚拟环境时都检查它。
我遇到了同样的问题。我的activate
脚本很好,但是当心、所有pip*
脚本和easy_install*
脚本有错误的shebang。它们都必须手动修复。我无法通过重新安装 pip 或类似的东西来修复它们。此外,对 Joe Holloway 的解决方法进行了澄清:问题不在于 shell 搜索 pip,而是 pip 明确指定了 wrong python。因此,您需要自己指定 python,如下所示:$ ~/.virtualenvs/venv/bin/python ~/.virtualenvs/venv/bin/pip --version
我在 --relocatable
我的 env 之后遇到了这个问题,第 42 行是错误的,看起来 --relocatable
做得不对。
这发生在我重命名中间目录时,所以我不得不在 '/bin' 中编辑激活和 pip 脚本以上是关于pip 安装在全局站点包而不是 virtualenv的主要内容,如果未能解决你的问题,请参考以下文章
在使用 github 操作进行构建期间执行诗歌安装时,使用预编译的 numpy 包而不是构建它