![](/img/trans.png)
[英]pip installing in usr/lib/python3.6/site-packages instead of virtualenv on ubuntu server
[英]pip installing in global site-packages instead of virtualenv
使用pip3
在 virtualenv 中安装virtualenv
会导致 package 安装在全局站点包文件夹中,而不是 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 将安装在全局站点包文件夹中,而不是 virtualenv 的站点包文件夹中。
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
行,检查您的 virtualenv 路径是否正确。 它看起来像这样
VIRTUAL_ENV="/Users/me/path/to/virtual/environment"
如果错了,更正它, deactivate
,然后. bin/activate
. bin/activate
,如果我们共同的问题有相同的原因,它应该可以工作。 如果它仍然没有,无论如何你都在正确的轨道上。 我经历了同样的问题去解决日常像你一样, which pip
荷兰国际集团遍地,以下堆栈跟踪等。
绝对确保
/Users/kristof/VirtualEnvs/testpy3/bin/pip3
是你想要的,而不是指另一个同名的测试项目(我有这个问题,不知道它是如何开始的。我怀疑是同时运行多个 virtualenvs)。
如果这些都不起作用,那么临时解决方案可能是,正如乔·霍洛威所说,
只需使用完整路径运行 virtualenv 的 pip(即不要依赖于搜索可执行路径),您甚至不需要激活环境。 它会做正确的事情。
也许不理想,但它应该在紧要关头工作。
链接到我的原始问题:
对我来说,这不是 pip 或 virtualenv 问题。 这是一个python问题。 在学习了一些在线教程后,我在 ~/.bash_profile(或 ~/.bashrc)中手动设置了我的 $PYTHONPATH。 这个手动设置的 $PYTHONPATH 在 virtualenv 中可用,因为它可能应该被允许。
此外,出于某种原因, add2virtualenv
没有将我的项目路径添加到我的 $PYTHONPATH 中。
对于那些可能仍然被卡住的人来说,只是一些分叉路径! 干杯!
我遇到了同样的问题,我通过删除 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 2 和 3 的 macos 上遇到了同样的问题。
另外,我有别名指向.bash_profile
python3 和 pip3 。
alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3
使用python3 -m venv venv
删除别名并重新创建虚拟python3 -m venv venv
解决了该问题。
首先要检查的是 pip 解析到的位置:
which pip
如果你在一个 virtualenv 中,你会期望这会给你类似的东西:
/path/to/virtualenv/.name_of_virtualenv/bin/pip
但是,由于某种原因,它可能会解析到您的系统 pip。 例如,您可能会在您的 virtualenv 中看到这一点(这很糟糕):
/usr/local/bin/pip (或任何不在您的 virtualenv 路径中的东西)。
要解决此问题,请检查您的 pipconfig:
~/.pipconf
~/.conf/pip
/etc/pip.conf
并确保没有任何东西强制您的 Python 路径或 pip 路径(这为我修复了它)。
然后尝试启动一个新终端并重建您的 virtualenv(删除然后再次创建它)
我也有这个问题。 从我的 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 包被正确安装到本地 site-packages 目录中。 使用完整路径名调用pip
进入虚拟环境也可以正常工作。 我很想知道为什么我的 Mac 没有像我期望的那样使用 $PATH 。
我在从 virtualenv 中安装 python 包时遇到了同样的问题。 在我的案例中,根本原因是不同的。 在 virtualenv 中,我(出于对 Ubuntu 的习惯)执行以下操作:
sudo easy_install -Z <package>
这导致 bin/pip shebang 被忽略,并使用 root 的非 virtualenv python 将其安装在全局站点包中。 由于我们有一个虚拟环境,我们应该安装没有“sudo”的包
转到虚拟环境中的 bin 目录并像这样编写:
./pip3 install <package-name>
我在运行 Manjaro 时偶然发现了同样的问题。 我使用python3 -m ven venv
创建了虚拟环境,然后使用source venv/bin/actiave
。 which python
和which pip
都指向 virtualenv 中正确的二进制文件,但是我无法安装到 virtualenv,即使使用二进制文件的完整路径。 原来,当我用sudo pacman -R python-pip python-reportlab
(必须包含 reportlab 以满足依赖项)卸载 python-pip 包时,一切都开始按预期工作。 不知道为什么,但这可能是由于系统包优先的双重安装。
更新到pip==8.0.0
后我遇到了类似的问题。 不得不求助于调试 pip 来找出错误的路径。
事实证明,我的配置文件目录有一个带有一些空路径值的 distutils 配置文件。 这导致所有包都安装到同一个根目录而不是适当的虚拟环境(在我的例子中是/lib/site-packages
)。
我不确定配置文件是如何到达那里的,或者它是如何有空值的,但它是在更新 pip 后启动的。
如果其他人遇到同样的问题,只需删除文件~/.pydistutils.cfg
(或删除空配置路径)即可解决我环境中的问题,因为 pip 返回到默认的分布式配置。
今天遇到了同样的问题。 我只是使用sudo easy_install pip
(OSX/Max) 重新安装了全局sudo easy_install pip
,然后使用sudo virtualenv nameOfVEnv
再次创建了我的 virtualenv。 然后在激活新的 virtualenv 后, pip
命令按预期工作。
我不认为我在第一次创建 virtualenv 时使用了sudo
,这可能是无法从 virtualenv 中访问pip
的原因,我能够在此修复之前访问pip2
,尽管这很奇怪。
以下是一些可以在使用虚拟环境时避免头痛的做法:
为了更好地表示这种做法,这里是一个模拟:
$ 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
>>>
Virtualenv 为您创建了一个全新的环境,定义了 $PATH 和一些其他变量和设置。 当您使用sudo pip install package 时,您以root身份运行 Virtualenv,转义创建的整个环境,然后在全局站点包上安装包,而不是在您拥有虚拟环境的项目文件夹中,尽管您已经激活了环境。
...您必须从项目的bin目录中的某些文件中调整一些变量。
例如:
bin/pip, line 1 (She Bang)
bin/activate,第 42 行(VIRTUAL_ENV)
我有这个问题。 事实证明,我的一个文件夹名称中有一个空格导致了问题。 我删除了空间,使用 venv 删除并重新实例化,一切都很好。
创建 virtualenv 实例然后更改父文件夹名称时会出现此问题。
以上解决方案都不适合我。
我的 venv 很活跃。 pip -V
和which pip
给了我正确的 virtualenv 路径,但是当我使用激活的 venv pip install
-ed 包时,我的pip freeze
保持为空。
所有的环境变量也是正确的。
最后,我只是更改了 pip 并删除了 virtualenv:
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 中。
创建虚拟环境后,尝试使用位于yourVirtualEnvName\\Scripts 中的pip
它应该在您的虚拟环境中的Lib\\site-packages中安装一个包
我在 Windows 上遇到了类似的问题。 这是由于在 virtualenv 文件夹名称内重命名我的项目中的文件夹结构引起的。 文件中的路径没有改变,但在创建虚拟环境时保持原样。 正如 Chase Ries 提到的,我已经将文件中的路径更改为 VIRTUAL_ENV 和 python.exe
set "VIRTUAL_ENV=path_to_venv\\venv"
11 行$env:VIRTUAL_ENV="path_to_venv\\venv"
文件中的 30 行#!d:\\path_to_env\\venv\\scripts\\python.exe
这行在文件的末尾,在我的例子中移动到 667 行的右侧,我正在处理光盘d 所以在路径的开头是它的字母#!d:\\path_to_env\\venv\\scripts\\python.exe
这行在文件的末尾,在我的例子中移到了右边的 667 行#!d:\\path_to_env\\venv\\scripts\\python.exe
这行在文件的末尾,在我的例子中移到了右边的 667 行我也有这个问题。 调用sudo pip install
导致 Python 包安装在全局站点包目录中,调用pip install
工作正常。 所以不要在 virtualenv 中使用sudo 。
同样的问题。 从 Linux rpm
安装的 Python3.5 和 pip 8.0.2。
我没有找到主要原因,无法给出正确答案。 看起来有多种可能的原因。
但是,我希望我可以帮助分享我的观察和解决方法。
pyvenv
与--system-site-packages
./bin
不包含pip
, pip
可从系统站点包中获得 pyvenv
没有--system-site-packages
pip
被安装到./bin
,但它是一个不同的版本(来自ensurepip
) pyvenv
明显解决方法--system-site-packages
:
--system-site-packages
选项的情况下创建它pyvenv.cfg
文件中的include-system-site-packages = false
更改为true
还值得检查您是否没有以某种方式修改 virtualenv 的路径。
在这种情况下, bin/pip
的第一行(以及其余的可执行文件)将具有不正确的路径。
您可以编辑这些文件并修复路径,也可以删除并重新安装 virtualenv。
对于 Python 3ers
尝试更新。 我遇到了完全相同的问题并尝试了 Chases 的回答,但没有成功。 重构它的最快方法是尽可能更新您的 Python Minor / Patch 版本。 我注意到我正在运行 3.5.1 并更新到 3.5.2。 Pyvenv 再次起作用。
当我在错误的位置创建 virtualenv 时,这发生在我身上。 然后我想我可以将目录移动到另一个位置而不重要。 这很重要。
mkdir ~/projects
virtualenv myenv
cd myenv
git clone [my repository]
哦,废话,在创建 virtualenv 和克隆代表之前,我忘了 cd 进入projects
。 哦,好吧,我懒得破坏和重建。 我会毫无问题地移动目录。
cd ~
mv myenv projects
cd projects/myenv/myrepo
pip install -r requirements
不,想要更多权限,什么? 我觉得这很奇怪,但 SUDO AWAY! 然后将软件包安装到全局位置。
我学到的教训是,只需删除 virtualenv 目录。 不要动它。
安装 Divio 后出现此问题:它在启动终端时以某种方式更改了我的 PATH 或环境。
在这种情况下,解决方案只是执行source ~/.bash_profile
,它应该已经设置好让你回到原来的 pyenv/pyenv-virtualenv 状态。
不知何故,项目文件夹中带有前缀 =“”的 setup.cfg 文件
在项目文件夹外的 virtualenv 上运行 pip install 工作,因此从内部告诉 pip 使用默认为“/”的空前缀
删除文件修复它
当我使用--python=python3.6
标志安装virtualenv时,这发生在我身上,但后来尝试使用pip2 install
。
使用将要使用的版本标记创建virtualenv可以解决权限问题。 要检查,请尝试使用which pip
或which pip2
或which pip3
(取决于您的选择)。 如果有任何pip
您使用显示的路径不venv
这里是你的问题。
我遇到了这个问题,在尝试了上述所有解决方案后,我只是删除了所有内容并重新开始。
在我自己的情况下,我使用sudo
创建虚拟环境存在的文件夹之一,并且 sudo 将特权授予 root
我非常生气! 但它奏效了!
出于某种原因,我必须使用“sudo”在我的 ubuntu 系统上通过 pip 安装软件包。 这导致软件包安装在全局站点软件包中。 将此放在此处,供将来可能会遇到此问题的任何人使用。
我正是标题中的问题,我解决了它。 在我清理完 PATH 后,Pip 开始安装在 venv 站点包中:它一开始就有一个到我本地 ~/bin 目录的路径。
所以,我的建议是:彻底检查你的环境变量是否有“垃圾”或任何非标准的东西。 不幸的是,virtualenv 可能对这些很敏感。
祝你好运!
上面有很多很好的讨论,但使用了 virtualenv 示例。 由于'conda'现在是管理virtualenv的推荐工具,我总结了在conda env中运行pip的步骤如下。
我将使用 py36r 作为 env 的名称,/opt/conda/envs 是 envs 的前缀):
$ 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 activate
$ /opt/conda/envs/py36r/bin/pip
此外,如果您使用 conda 安装,则无需激活即可安装:
$ conda install -n py36r pkg_abc ...
简短的回答是使用参数“—no-site-packages”运行命令 virtualenv。
带解释的长答案:-
所以在这里和那里跑来跑去,经历了很多线程之后,我发现我自己是问题所在。 以上答案已经给出了想法,但我想再次讨论所有内容。
问题是即使您正在激活环境,它也指的是系统环境,因为我们创建 virtualenv 的方式。
当我们运行命令virtualenv env -p python3 时,它会安装 virtualenv,但不会创建 no-global—site-packages.txt。
因此,当您通过 source activate 命令激活环境时,该文件名为 site.py(名称可能不同,我只是忘记了),它会运行并检查此文件是否不存在,它不会将您的 env 路径添加到 sys.path并使用系统python。
要解决此问题,只需运行带有额外参数的 virtualenv —no-site-packages 它将创建该文件,当您激活环境时,它将在您的 PATH 变量中添加您的自定义环境路径,使其可访问。
视窗
对我来说,解决方案不是使用mkvirtualenv
,而是:
python -m venv path/to/your/virtualenv
workon 工作正常。
在 virtualenv 中: pip -V
显示 virtualenv 的 pip 路径
我也遇到了这个问题,困扰了我很久,后来按照@Chase Ries的方法解决了。
解决问题的关键是:
尝试检查您的
bin/pip
和bin/activate
脚本。 在bin/pip
中,查看 shebang。 这是正确的吗? 如果不是,请更正。 然后在你的bin/activate
中的 ~42
行,检查你的 virtualenv 路径是否正确。 它看起来像这样VIRTUAL_ENV="/Users/me/path/to/virtual/environment"
如果错了,更正它,
deactivate
,然后. bin/activate
. bin/activate
,如果我们的共同问题有相同的原因,它应该有效。
下面,我将在Ubuntu
环境下详细说明这个过程, Windows
和MacOS
也是如此。
这句话的意思是我们要检查虚拟环境下bin/pip
文件的第一行#!/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
命令。
所以,对我来说,这个问题的原因是虚拟环境所在文件夹的路径发生了变化(之前整理文件夹时留下的秘密问题)。
但是由于虚拟环境所在的文件夹位置发生了变化,可能会出现很多路径错误,所以最简单的方法就是将虚拟环境所在的文件夹恢复到原来的位置。
where pip
找出 pip 位置,如果在基础环境中,可能没有安装 'pip'康达安装 pip
享受!
我检查了这里的所有答案,但没有一个对我有用。 特别检查了 Chase Ries 的答案,目录在 pip.exe 和 activate.bat(对于 Windows)中是正确的
我通过将位于 C:\Users\oguno\AppData\Roaming\pip 的 pip.ini(对于 Windows,我认为它是其他操作系统的其他东西)复制到 C:\Users\oguno\Desktop\iec61850 解决了这个问题\myenv3 我的 venv 所在的位置并将目标更改为 C:\Users\oguno\Desktop\iec61850\myenv3\Lib\site-packages 这显示了我的虚拟环境中的站点包。
对于那些检查了 python 和 pip 有正确的 virtualenv 路径的人,另一个可能的问题在于 pip 配置
就我而言,我在配置文件中添加了 --prefix 以在不同路径中安装包。 这被 virtualenv 881334444827288 拾取,导致安装在与全局 pip 相同的位置。
我遇到了这个问题,并通过删除目录中导致 venv 路径的空格来修复它。
我有同样的问题。 Pip 仅全局安装。 这意味着pip的配置有问题。
首先,找到 pip 配置文件:
python -m pip config debug
它将列出所有 pip 配置文件。 如果有“假”(没有文件),创建它(或添加行尊重 - virtualenv = true):
[global]
default-timeout = 60
respect-virtualenv = true
download-cache = /tmp
log-file = /tmp/pip-log.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.