使用带有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。
答案 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
等。