pip如何了解virtualenv以及安装软件包的位置

时间:2014-11-22 15:45:34

标签: python install pip virtualenv

我熟悉python virtualenv的工作原理,当我们激活时,它主要修改VIRTUAL_ENVPATH变量。主要是它将virtualenv的bin目录添加到系统PATH,并将VIRTUAL_ENV设置为指向虚拟环境根目录。

作为一项实验,我使用virtualenv(版本1.11.6)执行此操作:

# Created two fresh virtual environments
virtualenv /tmp/env1
virtualenv /tmp/env2
echo $PATH
> SOME_PATH_VALUE

# Play with env1
source /tmp/env1/bin/activate
echo $PATH
> /tmp/env1/bin:SOME_PATH_VALUE
pip list
> pip, setuptools, wsgiref
pip install wget
> pip, setuptools, `wget`, wsgiref

# Obviously env2 has pip, setuptools and wsgiref only as of now
export PATH=/tmp/env2/bin:$PATH
pip list
> pip, setuptools, wsgiref

通过我的实验,它完全取决于PATH变量来确定安装路径,但我不确定这是不是全局。所以关键问题是:

  1. pip如何知道安装所请求包的位置?
  2. 如果我的virtualenv配置为不查找site-packages(确保no-global-site-packages.txt文件存在于正确的位置)并且PATH变量已正确设置,但pip install仍会查看系统站点 - 包,然后如何调试呢?

1 个答案:

答案 0 :(得分:1)

Virtualenvs在pip目录中安装了bin/命令。通过交换PATH,您每次都执行不同的pip命令。

bin/pip脚本与该虚拟环境的bin/python可执行文件相关联,而bin/python可执行文件与virtualenv相关联;你没有 使用source bin/activate来使用virtualenv,因为只有bin/python可执行文件具有它需要的所有信息。

您可以通过查看sys.prefix variable

来查看此内容
$ virtualenv-2.7 /tmp/env1
New python executable in /tmp/env1/bin/python2.7
Also creating executable in /tmp/env1/bin/python
Installing setuptools, pip...done.
$ virtualenv-2.7 /tmp/env2
New python executable in /tmp/env2/bin/python2.7
Also creating executable in /tmp/env2/bin/python
Installing setuptools, pip...done.
$ env1/bin/python -c 'import sys; print sys.prefix'
/private/tmp/env1
$ env2/bin/python -c 'import sys; print sys.prefix'
/private/tmp/env2