2012-02-10 110 views
4

使用virtualenv几小时后关闭pip,我发现virtualenv激活后使用的PIP版本是全局PIP,而不是相对于该环境的PIP;这样如果你没有设置shell环境变量export PIP_RESPECT_VIRTUALENV=true,pip会将任何新的软件包(例如pip install argparse)安装到全局范围,而不是只安装到virtualenv。默认情况下系统PIP而不是virtualenv PIP?

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

有它没有背后是有原因的工作在默认情况下呀?

请参阅如何PIP_RESPECT_VIRTUALENV作品的解释here

+0

FWIW:我使用的virtualenvs有自己的点子的副本安装在该virtualenv。 – delnan 2012-02-10 21:48:28

+0

@delnan他们如何获得他们自己的点子副本? – bitcycle 2012-02-10 21:50:59

+1

virtualenv的最新版本(1.4版以后)应该自动安装pip的每个env副本。你使用的是什么版本的virtualenv? – philofinfinitejest 2012-02-10 22:32:26

回答

3

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

有这样一个点子总是会尊重你的virtualenv:不靠$PATH。使用:

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

这将是很好,找出发生了什么事,并与他人分享您的解决方案。同时,使用pip的绝对路径也可以。

3

当您创建的virtualenv中,activate文件会有限制变量VIRTUAL_ENV在您第一次创建的根目录的位置。然后在您source <your-venv>/bin/activate时输出此变量。

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

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

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

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

那么你当然可以测试pipwhich pip版本应该产生:

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

而非/usr/bin/pip/bin/pip