默认情况下系统PIP而不是virtualenv PIP?

时间:2012-02-10 21:41:24

标签: python virtualenv pip

使用带有pip off-and-on几天的virtualenv之后,我发现在virtualenv被激活之后使用的PIP版本是全局PIP而不是相对于该环境的PIP;这样,如果你没有设置shell环境变量export PIP_RESPECT_VIRTUALENV=true,pip会将任何新的包(例如pip install argparse)安装到全局范围,而不是仅安装到virtualenv。

如果激活了virtualenv,我希望PIP默认安装到virtualenv。

背后有没有理由默认以这种方式工作?

有关PIP_RESPECT_VIRTUALENV的工作原理,请参阅解释here

2 个答案:

答案 0 :(得分:3)

这不是我第一次看到有人报告同一问题。我不知道发生了什么,但是有些人不鼓励使用source /path/to/venv/bin/activate因为它会弄乱你的$PATH

有一种方式pip将始终尊重你的virtualenv:不要依赖$PATH。使用:

/path/to/venv/bin/pip install MYPACKAGE

很高兴找到你发生的事情并与他人分享你的解决方案。同时,可以使用绝对路径进行点击。

答案 1 :(得分:3)

当您创建virtualenv时,activate文件硬编码变量VIRTUAL_ENV到您首次创建根目录的位置。然后在source <your-venv>/bin/activate

时导出此变量

因此,如果在创建后移动virtualenv目录,则硬编码文件路径将不正确。

只需在文本编辑器中打开<your-venv>/bin/activate,并确保将VIRTUAL_ENV设置为virtualenv目录的新路径:

VIRTUAL_ENV="/Full/path/to/<your-venv>"
export VIRTUAL_ENV

再次运行source <your-venv>/bin/activate之前。

然后,您当然可以使用pip来测试which pip的版本,该版本应生成:

/Full/path/to/<your-venv>/bin/pip

而不是/usr/bin/pip/bin/pip等。