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

ƘɌỈ*_*ƬƠƑ 84 python macos 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
Run Code Online (Sandbox Code Playgroud)

更改了pip3.bash_profile中的变量; 添加以下行:

export PATH=/usr/local/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

运行virtualenv返回$PATH(重启shell后).

注意:.bash_profile仍然会返回/ which python3.

使用pip3安装virtualenv:

pip3 install virtualenv
Run Code Online (Sandbox Code Playgroud)

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

virtualenv testpy3 -p python3
cd testpy3
source bin/activate
Run Code Online (Sandbox Code Playgroud)

注意:如果我没有指定-p python3,那么virtualenv中的bin文件夹中将缺少pip.

运行/usr/local/bin/python3which python3返回virtualenv文件夹:

/Users/kristof/VirtualEnvs/testpy3/bin/pip3
Run Code Online (Sandbox Code Playgroud)

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

pip install markdown
Run Code Online (Sandbox Code Playgroud)

运行usr/bin/python回报:

Markdown (2.3.1)
pip (1.4.1)
setuptools (2.0.1)
virtualenv (1.11)
Run Code Online (Sandbox Code Playgroud)

内容virtualenv:

__pycache__/
_markerlib/
easy_install.py
pip/
pip-1.5.dist-info/
pkg_resources.py
setuptools/
setuptools-2.0.2.dist-info/
Run Code Online (Sandbox Code Playgroud)

内容pip3:

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/
Run Code Online (Sandbox Code Playgroud)

如您所见,全局 site-packages文件夹包含Markdown,virtualenv文件夹不包含.

注意:我之前在不同的VM上安装了Python2和Python3(遵循这些说明)并且在Python3中遇到了同样的问题; 尽管如此,在基于Python2的virtualenv中安装软件包仍能完美运行.

任何提示,提示,...将非常感激.

Cha*_*ies 81

搞笑你带来了这个,我只是遇到了完全相同的问题.我最终解决了它,但我仍然不确定是什么导致它.

尝试检查您的脚本bin/pipbin/activate脚本.在bin/pip,看看shebang.这是对的吗?如果没有,请更正.然后42在你的线上〜bin/activate,检查你的virtualenv路径是否正确.它看起来像这样

VIRTUAL_ENV="/Users/me/path/to/virtual/environment"
Run Code Online (Sandbox Code Playgroud)

如果它是错的,那就纠正它,deactivate然后. bin/activate,如果我们的共同问题有相同的原因,它应该有效.如果它仍然没有,那么无论如何你都在正确的轨道上.我和你一样经历了同样的问题解决程序,which pip一遍又一遍,跟踪堆栈跟踪等.

绝对确定

/Users/kristof/VirtualEnvs/testpy3/bin/pip3
Run Code Online (Sandbox Code Playgroud)

是你想要的,而不是指另一个同名的测试项目(我有这个问题,并且不知道它是如何开始的.我的怀疑是同时运行多个虚拟现实).

如果这一切都不起作用,那么临时解决办法可能就像Joe Holloway所说的那样,

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

也许并不理想,但它应该在紧张的情况下工作.

链接到我原来的问题:

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

  • 当我重命名一个中间目录时发生这种情况,所以我必须在'/ bin'中编辑activate和pip脚本 (3认同)
  • 我有同样的问题.我的`activate`脚本很好,但是**小心**,_all_的`pip*`脚本和`easy_install*`脚本有错误的shebang.它们都必须手动修复.我无法通过重新安装pip或类似的东西来修复它们.此外,澄清了Joe Holloway的解决方法:问题不在于shell搜索pip,而是pip明确指定了_wrong_python这一事实.因此你需要自己指定python,如下所示:`$〜/ .virtualenvs/venv/bin/python~/.virtualenvs/venv/bin/pip --version` (2认同)

e.t*_*psy 15

对我来说,这不是一个小点或虚拟问题.这是一个蟒蛇问题.在线上学习了一些教程之后,我在〜/ .bash_profile(或〜/ .bashrc)中手动设置了我的$ PYTHONPATH.这个手动设置$ PYTHONPATH在virtualenv中可用,因为它可能应该被允许.

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

对于那些可能仍然被卡住的人来说,只是一些分叉路径!干杯!


Rez*_*adi 10

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

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

现在一切都像魅力一样.


Mir*_*c21 7

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

此外,我有别名指向我的.bash_profile.

alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3
Run Code Online (Sandbox Code Playgroud)

删除别名并使用python3 -m venv venv修复了该问题的重新创建虚拟环境。


Sam*_*art 6

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

which pip
Run Code Online (Sandbox Code Playgroud)

如果你在一个 virtualenv 中,你会期望这会给你类似的东西:

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

但是,由于某种原因,它可能会解析到您的系统 pip。例如,您可能会在您的 virtualenv 中看到这一点(这很糟糕):

/usr/local/bin/pip (或任何不在您的 virtualenv 路径中的东西)。

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

~/.pipconf
~/.conf/pip
/etc/pip.conf
Run Code Online (Sandbox Code Playgroud)

并确保没有任何东西强制您的 Python 路径或 pip 路径(这为我修复了它)。

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

  • 还要检查`/etc/pip.conf`!我有一个类似的问题,经过大量调试后发现有人通过乱弄这个文件来错误地配置了我正在处理的系统。 (2认同)
  • 我有一个终端会话定义的别名来覆盖 pip,由于某些原因“which pip”仍然给了我正确的路径! (2认同)

kme*_*757 5

我也有这个问题。pip install <package_name>/bin我的Mavericks Mac上的Python 3.3虚拟环境中的目录调用会导致将Python软件包安装在Python 2.7全局站点软件包目录中。尽管我的$ PATH从包含目录开始pip。奇怪的。在CentOS上不会发生这种情况。对我来说,解决方案是致电pip3而不是pip。当我已经安装了PIP通过在虚拟环境中ez_setup,三“画中画”的可执行文件已被安装在/bin目录- pippip3pip3.3。奇怪的是,所有三个文件都完全相同。呼唤pip3 install <package_name>导致将Python软件包正确安装到本地site-packages目录中。pip使用完整路径名调用虚拟环境也可以正常工作。我很想知道为什么我的Mac为什么不像我期望的那样使用$ PATH。


小智 5

我在从 virtualenv 中安装 python 包时遇到了同样的问题。在我的案例中,根本原因是不同的。在 virtualenv 中,我(出于对 Ubuntu 的习惯)执行以下操作:

sudo easy_install -Z <package>
Run Code Online (Sandbox Code Playgroud)

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


Tao*_*lam 5

转到虚拟环境中的 bin 目录并像这样编写:

./pip3 install <package-name>
Run Code Online (Sandbox Code Playgroud)