virtualenv: 指定使用全局包与本地包
可能重复的问题:
让虚拟环境继承特定的全局包
有没有办法创建一个 virtualenv
(虚拟环境),并指定哪些包应该从系统的全局安装中使用(继承),哪些包应该被忽略?
具体来说,比如说系统中已经安装了:
numpy
scipy
matplotlib
我想创建一个虚拟环境,使得:
- 使用系统全局安装的
numpy
和scipy
- 忽略 系统全局的
matplotlib
,并让我可以安装/升级我自己的版本(用pip -U matplotlib
)。
这样做可以吗?
1 个回答
89
最简单的方法是创建一个虚拟环境,这个环境可以使用系统中的包,然后安装你需要的版本:
$ virtualenv --system-site-packages foo
$ source foo/bin/activate
$ pip install Django==1.4.3
你也可以在之后清理这个虚拟环境,查看一下 (在新版本的虚拟环境中,用 pip freeze
的输出,删除你不想要的包。pip uninstall
删除系统包已经不再有效了)
另一种方法是创建一个干净的虚拟环境,然后链接你需要的部分:
$ virtualenv --no-site-packages foo
$ source foo/bin/activate
$ ln -s /usr/lib/python2.7/dist-packages/PIL* $VIRTUAL_ENV/lib/python*/site-packages
在非类Unix的环境中,命令可能会稍有不同。路径也取决于你使用的系统。要找到库的路径,可以启动Python解释器(不激活虚拟环境),导入模块,然后查看 module_name.__path__
。例如:
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>> PIL.__path__
['/usr/lib/python2.7/dist-packages/PIL']
另外,如果你是用 --system-site-packages
创建的虚拟环境,你可以用 pip install --upgrade --ignore-installed numpy
安装比系统中更新的版本。