在全局站点包中安装 pip 而不是 viralenv

使用 pip3virtualenv中安装软件包会导致软件包安装在全局站点软件包文件夹中,而不是在 viralenv 文件夹中。下面是我在 OS X Mavericks (10.9.1)上设置 Python 3和 viralenv 的方法:

我安装 Python 3时使用的是 Homebrew:

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,那么将在 viralenv 中的 bin 文件夹中找不到 pip。

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

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

现在,当我尝试在已激活的 viralenv 中使用 pip 安装 Markdown 时,pip 将安装在全局站点包文件夹中,而不是 viralenv 的站点包文件夹中。

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,而 viralenv 文件夹不包含 Markdown。

注意: 我之前在不同的 VM 上安装了 Python 2和 Python 3(遵循 这些的指令) ,Python 3也有同样的问题; 但是在基于 Python 2的 viralenv 中安装包的工作完美无缺。

任何建议,提示,... 将非常感谢。

147439 次浏览

有趣的是你提到这个,我也有同样的问题。我最终解决了,但我还是不确定是什么引起的。

尝试检查您的 bin/pipbin/activate脚本。在 bin/pip中,看看这个程序。对吗?如果没有,纠正它。然后在你的 bin/activate中的 42行上,检查你的 viralenv 路径是否正确。就像这样

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

如果它是错的,纠正它,deactivate,然后 . bin/activate,如果我们的共同问题有相同的原因,它应该工作。如果还是不行,那你的方向是对的。我经历了同样的问题解决例程,如你所做的,which piping 一遍又一遍,跟踪堆栈跟踪,等等。

一定要确保

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

是您想要的,而不是指另一个类似名称的测试项目(我遇到过这个问题,不知道它是如何开始的。我怀疑同时运行多个虚拟世界)。

如果这些都不起作用,一个暂时的解决办法可能是,正如乔 · 霍洛韦所说,

只要运行 Virtual alenv 的 pip 和它的完整路径(即不依赖于搜索可执行路径) ,您甚至不需要激活环境。它会做正确的事。

也许不是很理想,但在紧要关头应该会奏效。

链接到我最初的问题:

VirtualEnv/Pip 尝试在全球范围内安装软件包

我也有这个问题。在 Mavericks Mac 上,从 Python 3.3虚拟环境中的 /bin目录调用 pip install <package_name>,导致 Python 包被安装在 Python 2.7全局站点包目录中。尽管事实上我的 $PATH 是从包含 pip的目录开始的。真奇怪。这在 CentOS 上是不会发生的。对我来说,解决方案是调用 pip3而不是 pip。当我通过 /bin2在虚拟环境中安装 /bin1时,在 /bin目录中安装了三个“ pip”可执行程序—— pippip3pip3.3。奇怪的是,这三份文件完全一样。调用 pip3 install <package_name>导致 Python 包被正确地安装到本地站点包目录中。使用完整的路径名调用到虚拟环境中的 pip也能正常工作。我很想知道为什么我的 Mac 没有像我期望的那样使用 $PATH。

对我来说,这不是一个 pip 或 Virtual alenv 问题。是蟒蛇的问题。我已经在 ~/中手动设置了 $PYTHONPATH。Bash _ profile (或 ~/。Bashrc)后,按照一些教程在线。这个手动设置 $PYTHONPATH 在 viralenv 中是可用的,因为它可能应该被允许。

另外,由于某种原因,add2virtualenv没有将我的项目路径添加到我的 $PYTHONPATH 中。

只是给那些可能还在困境中的人一些分岔路径! 干杯!

我在使用 viralenv 安装 python 包时遇到了同样的问题。 我案子的根本原因是不同的。 在 Virtual alenv 内部,我(出于在 Ubuntu 上的习惯)正在做:

sudo easy_install -Z <package>

这导致 bin/pip shebang 被忽略,并且它使用 root 的 non viralenv python 将其安装到全局站点包中。 因为我们有一个虚拟环境,我们应该安装没有“ sudo”的软件包

我也有这个问题。调用 sudo pip install会导致 Python 包被安装到全局站点包目录中,而调用 pip install则可以正常工作。 因此,在 viralenv 中不使用 Sudo

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

我不认为我使用 sudo在第一虚拟机的创建,这可能是没有访问 pip的原因,从内部虚拟机,我能够访问 pip2之前,这个修复虽然是奇怪的。

我有一个类似的问题后,更新到 pip==8.0.0。不得不求助于调试 pip 来跟踪错误路径。

原来我的配置文件目录中有一个 distutils 配置文件,其中包含一些空路径值。这导致所有包都被安装到同一个根目录,而不是适当的虚拟环境(在我的例子中是 /lib/site-packages)。

我不确定配置文件是如何到达那里的,或者它是如何有空值的,但它是在更新 pip 之后启动的。

如果其他人偶然发现同样的问题,只需删除文件 ~/.pydistutils.cfg(或删除空的配置路径)就可以修复我的环境中的问题,因为 pip 返回到默认的分布式配置。

同样的问题。 Python 3.5和 pip 8.0.2是从 Linux rpm安装的。

我没有找到一个主要的原因,也不能给出一个适当的答案。看起来有多种可能的原因。

然而,我希望我可以帮助分享我的观察和解决办法。

  1. pyvenv--system-site-packages

    • ./bin不包含 pippip可以从系统站点包中获得
    • 软件包在全球范围内安装(臭虫?)
  2. 没有 --system-site-packagespyvenv

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

pyvenv--system-site-packages的明显变通方法:

  • 不使用 --system-site-packages选项创建它
  • pyvenv.cfg文件中将 include-system-site-packages = false改为 true

同样值得检查的是,您没有以某种方式修改到 Virtual alenv 的路径。

在这种情况下,bin/pip中的第一行(以及其余的可执行文件)将有一个不正确的路径。

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

为了巨蟒三人组

试试更新。我也遇到了同样的问题,于是尝试了蔡斯的答案,但是没有成功。重构它的最快方法是在可能的情况下更新 Python 小版本/补丁版本。我注意到我正在运行3.5.1,并且更新到了3.5。Pyvenv 再次奏效。

首先要检查 pip 解析到的位置:

which pip

如果你在虚拟世界中,你会期望它给你一些东西,比如:

/path/to/viralenv/. name _ of _ viralenv/bin/pip

但是,由于某些原因,它可能会解析到您的系统 pip。例如,您可能会在 viralenv 中看到这一点(这是不好的) :

/usr/local/bin/pip (或者任何不在你的 Virtual alenv 路径中的东西)。

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

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

并且确保没有任何东西强制你的 Python 路径或者 pip 路径(这对我来说是固定的)。

然后尝试启动一个新的终端并重新构建您的 viralenv (删除然后再创建它)

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

  • 为项目创建文件夹。
  • 在此文件夹中创建 虚拟世界项目。
  • 在激活您的项目环境之后,永远不要使用“ Sudo Pip 安装软件包”。
  • 完成你的工作后,始终“ 解除”你的环境。
  • 避免重命名项目文件夹。


为了更好地表示这种实践,这里有一个模拟:


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

$ 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 为您创建了一个全新的环境,定义了 $PATH 和其他一些变量和设置。当你使用 Sudo pip 安装软件包的时候,你是以 的形式运行 Virtualenv,逃离创建的整个环境,然后在全局站点包 而不是在项目文件夹中上安装这个包,在这里你有一个虚拟环境,虽然你已经激活了这个环境。

如果您重命名项目的文件夹(正如已接受答案中提到的那样) ..。

... 你必须调整一些变量从一些文件内的 垃圾箱目录的项目。

例如:

Bin/pip,第1行(She Bang)

Bin/active,第42行(VIRTUAL _ ENV)

我有个问题。原来是我的一个文件夹名中的一个空格导致了这个问题。我删除了空间,用 venv 删除并恢复了原状,一切都很好。

当创建一个 viralenv 实例然后更改父文件夹名称时会发生此问题。

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

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

现在一切都很顺利。

编辑 : 下面是为 Python 3的 venv 修改的上述代码:

deactivate # (if venv is activated first deactivate it)
rm -rf venv # Delete the old venv directory
python3 -m venv venv # Recreate a new, empty venv
. venv/bin/activate # Activate it
pip3 install -r requirements.txt # Install the dependencies

当我在错误的位置创建了 Virtual alenv 时,就发生了这种情况。然后我想我可以把目录移动到另一个地方而不用担心。这很重要。

mkdir ~/projects
virtualenv myenv
cd myenv
git clone [my repository]

糟糕,我忘了在创建 Virtual alenv 和克隆 Rep 之前把 CD 放进 projects。哦,我太懒了,不想破坏和重新创建。我会毫无疑问地移动目录。

cd ~
mv myenv projects
cd projects/myenv/myrepo
pip install -r requirements

不,想要更多的权限,什么? 我认为这是奇怪的,但 SUDO 远离! 然后安装到一个全球位置的软件包。

我学到的教训是,删除虚拟目录,不要移动它。

在安装 Divio 之后出现了这个问题: 它在启动终端时以某种方式改变了我的 PATH 或环境。

在这种情况下,解决方案只是执行 source ~/.bash_profile,它应该已经被设置为返回到原始的 pyenv/pyenv-viralenv 状态。

以上的方法对我都不管用。

我的 Venv 激活了。 pip -Vwhich pip给了我正确的 viralenv 路径,但是当我用激活的 venv 对 pip install进行编辑时,我的 pip freeze仍然是空的。

所有的环境变量也是正确的。

最后,我只是改变了 pip 并删除了 viralenv:

easy_install pip==7.0.2


pip install pip==10


sudo pip uninstall virtualenv

重新安装 venv:

sudo pip install virtualenv

创建 venv:

python -m virtualenv venv_name_here

并且所有软件包再次正确地安装到我的 venv 中。

在项目文件夹中有一个前缀 = “”的 setup.cfg 文件

在项目文件夹之外的 viralenv 上运行 pip install,所以从内部来看,它告诉 pip 使用一个默认为“/”的空前缀

删除文件修复了它

当我安装带有 --python=python3.6标志的 viralenv 时发生了这种情况,但之后我尝试使用 pip2 install
创建带有您将使用的版本标志的 viralenv 可以解决权限问题。要检查,请尝试 which pipwhich pip2which pip3(取决于您的选择)。如果你使用的任何 pip显示路径不到 venv这里是你的问题。

转到虚拟环境中的 bin 目录,像下面这样写:

./pip3 install <package-name>

创建虚拟环境后,尝试使用位于 YourVirtualEnvName 脚本中的 pip

它应该在您的虚拟环境中的 Lib 站点-软件包中安装一个包

我遇到了这个问题,在尝试了以上所有解决方案之后,我只是删除了所有内容,重新开始。

在我自己的案例中,我使用 sudo来创建存在虚拟环境的其中一个文件夹,而 sudo 给予 root 用户特权

我当时很生气,但是成功了!

由于某些原因,我不得不使用“ sudo”来通过 pip 在我的 ubuntu 系统上安装软件包。这导致软件包被安装在全局站点软件包中。把这个放在这里是为了以后可能面临这个问题的人。

我正好解决了题目上的问题。在我清理了 PATH 之后,Pip 开始在 venv 站点软件包中安装: 在最开始的时候,它有一个到我的本地 ~/bin 目录的路径。

因此,我的建议是: 彻底检查您的环境变量是否存在“垃圾”或任何非标准的东西。不幸的是,viralenv 对这些内容很敏感。

祝你好运!

上面有很多很好的讨论,但是使用了 Virtual alenv 示例。由于“ conda”现在是管理 viralenv 的推荐工具,因此我将在 conda env 中运行 pip 的步骤总结如下。

我将使用 py36r 作为 env 的名称,而/opt/conda/envs 是 env 的前缀) :

$ source /opt/conda/etc/profile.d/conda.sh # skip if already done
$ conda activate py36r
$ pip  install pkg_xyz
$ pip  list | grep pkg_xyz

注意,执行的 pip 应该在 /opt/conda/envs/py36r/bin/pip(而不是 /opt/conda/bin/pip)中。

或者,您可以简单地运行以下命令而不激活 conda

$ /opt/conda/envs/py36r/bin/pip

此外,如果您使用 conda 安装,您可以不激活安装:

$ conda install -n py36r pkg_abc ...

我偶然发现了运行 Manjaro 的同样问题。我使用 python3 -m ven venv创建了虚拟环境,然后使用 source venv/bin/actiave激活了它。which pythonwhich pip都指向 viralenv 中正确的二进制文件,但是我无法安装到 viralenv 中,即使使用了二进制文件的完整路径。事实证明,当我用 sudo pacman -R python-pip python-reportlab卸载 python-pip 包(必须包含 reportlab 以满足依赖性)时,一切都开始按预期运行。不知道为什么,但这可能是由于双重安装,其中系统包优先。

简短的回答是运行带有参数“ー no-site-package”的 Command viralenv。

详细回答及解释:-

因此,在跑了这里和那里,通过许多线程,我发现自己的问题。以上的答案已经给出了我的想法,但是我还是想把所有的问题再复习一遍。

  • 问题是,即使您激活了环境,它也是指系统环境,因为我们已经创建了 Virtual alenv。

  • 当我们运行命令 < em > viralenv env-p python3时 它会安装 viralenv,但不会创建 no-global ー site-packages.txt。

  • 因此,当你通过源代码激活命令激活环境时,这个名为 site.py (名字可以不同,我只是忘了)的文件会运行并检查这个文件是否存在,它不会将你的 env 路径添加到 sys.path 并使用 systems python。

  • 要解决这个问题,只需运行带有额外参数ーー no-site-package 的 viralenv,它将创建该文件,当您激活环境时,它将在 PATH 变量中添加您的自定义环境路径,使其可访问。

我在安装了 python2和3的 macos 上遇到了同样的问题。

此外,我在 .bash_profile中还有指向 python3和 pip3的别名。

alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3

移除别名并使用 python3 -m venv venv重新创建虚拟 env 解决了这个问题。

窗户

对我来说,解决办法就是不用 但是:

python -m venv path/to/your/virtualenv

工作正常。

而在 viralenv 中: pip -V显示了 viralenv 到 pip 的路径

我也遇到过这个问题,它困扰了我很长时间,直到我按照@Chase Ries 的方法解决了它。

解决这个问题的关键是:

尝试检查您的 bin/pipbin/activate脚本。在 bin/pip中,看看这个程序。对吗?如果没有,纠正它。然后在你的 bin/activate中的 42行上,检查你的 viralenv 路径是否正确。就像这样

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

如果它是错的,纠正它,deactivate,然后 . bin/activate,如果我们的共同问题有相同的原因,它应该工作。

下面,我将在 Ubuntu环境中详细解释这个过程,对于 WindowsMacOS也是如此。

这个句子的意思是 我们需要检查虚拟环境中 ABC1文件的第一行 #!/path/python是否正确。

正如我的档案中最初显示的:

#!/home/banni/dai/.venv/bin/python3

在终端运行 pip(绝对路径) :

/home/banni/dai/.venv/bin/pip

将发现一个错误:

bash: ./pip: /home/banni/dai/.venv/bin/python3: bad interpreter: No such file or directory

现在我很困惑为什么找不到这个 python3,因为 python3存在于虚拟环境所在的文件夹 .venv/bin中。

我检查文件夹 .venv/bin的绝对路径。执行 pwd命令后,它显示:

/home/banni/Research/dai/.venv/bin

仔细观察 .venv文件夹的路径已更改。将 /bin/pip文件的第一行更改为

#!/home/banni/Research/dai/.venv/bin/python3

同样,检查和修改 bin/activate文件。

我把 VIRTUAL_ENV="/home/banni/dai/.venv"改成了 VIRTUAL_ENV="/home/banni/Research/dai/.venv"

此时,在激活虚拟环境之后,可以正常执行 pip命令。

因此,对于我来说,这个问题的原因是 虚拟环境所在的文件夹的路径已更改(一个在以前组织文件夹时遗留下来的秘密问题)。

但是,由于虚拟环境所在文件夹的位置发生了变化,可能会出现许多路径错误,因此最简单的方法是将虚拟环境所在的文件夹还原到原始位置。

我在 Windows 上也遇到过类似的问题。这是由于在我的项目中重命名文件夹结构时使用了 viralenv 文件夹名造成的。文件中的路径没有改变,但保持了虚拟 env 创建时的状态。正如 Chase Ries 提到的,我已经在文件中更改了 VIRTUAL _ ENV 和 python.exe 的路径

  1. ./venv/Scripts/activate.bat ,文件中的 set "VIRTUAL_ENV=path_to_venv\venv"11行
  2. ./venv/Scripts/Activate.ps1 $env:VIRTUAL_ENV="path_to_venv\venv"30行在文件中
  3. ./venv/Scripts/pip.exe #!d:\path_to_env\venv\scripts\python.exe这一行是在一个文件的末尾,在我的例子中移到了右边的667行,我在光盘 d 上工作,所以在路径的开头是它的字母
  4. ./venv/Scripts/pipp3.7.exe #!d:\path_to_env\venv\scripts\python.exe这一行位于文件的末尾,在我的例子中,在667行中移到了右边
  5. ./venv/Scripts/pip3.exe #!d:\path_to_env\venv\scripts\python.exe这一行位于文件的末尾,在我的示例中,在667行中移到了右边
  1. 启动虚拟环境
  2. 使用 where pip查找 pip 位置,如果在基准 env 中,很可能“ pip”不是 安装
  3. 类型

康达安装管道

好好享受吧!

我检查了这里所有的答案,但没有一个对我有用。特别是检查 Chase Ries 的答案和 pip.exe 和 activate.bat (对于 Windows)中的目录是否正确

我通过复制 pip.ini (对于 Windows 来说,我认为这是其他操作系统的另一个东西)来解决这个问题,它位于 C: Users oguno AppData Roaming pip to C: Users oguno Desktop iec61850 myenv3 where my venv location and change the target as C: Users oguno Desktop iec61850 myenv3 Lib site-package,在我的虚拟环境中显示站点包。

对于那些检查 python 和 pip 有正确的 viralenv 路径的人来说,另一个可能的问题在于 pip 配置

在我的例子中,我在配置文件中添加了—— prefix,以便在不同的路径中安装包。这是采取了虚拟管道,导致安装在同一地方作为全局管道。

我有这个问题,通过删除目录中导致 venv 路径的空格来修复它。

我也有同样的问题,皮普只在全球范围内安装。 意思是 Pip 的配置有问题。

首先,查找 pip 配置文件:

python -m pip config debug

它将列出所有 pip 配置文件。如果有‘ false’(没有文件) ,创建它(或者添加行方面-viralenv = true) :

   [global]
default-timeout = 60
respect-virtualenv = true
download-cache = /tmp
log-file = /tmp/pip-log.txt