有没有办法virtualenv
为 Python 创建一个并指定应该从系统范围的安装中使用(继承)哪些包,以及应该从系统范围的安装中忽略哪些包?
更具体地说,例如,有一个系统范围的安装:
numpy
scipy
matplotlib
我想创建一个虚拟环境,这样:
- 使用系统范围的安装
numpy
和scipy
- 忽略系统范围的
matplotlib
,并让我安装/升级我自己的版本(使用pip -U matplotlib
)。
这可能吗?
有没有办法virtualenv
为 Python 创建一个并指定应该从系统范围的安装中使用(继承)哪些包,以及应该从系统范围的安装中忽略哪些包?
更具体地说,例如,有一个系统范围的安装:
numpy
scipy
matplotlib
我想创建一个虚拟环境,这样:
numpy
和scipy
matplotlib
,并让我安装/升级我自己的版本(使用pip -U matplotlib
)。这可能吗?
最简单的方法是创建一个包含系统站点包的 virtualenv,然后安装您需要的版本:
$ virtualenv --system-site-packages foo
$ source foo/bin/activate
$ pip install Django==1.4.3
(删除 system-site-packagespip freeze
之后,您还可以通过检查输出并删除不需要的包来清理 virtualenv 。pip uninstall
不再适用于较新版本的 virtualenv)
另一种方法是创建一个干净的 virtualenv 并链接您需要的部分:
$ virtualenv --no-site-packages foo
$ source foo/bin/activate
$ ln -s /usr/lib/python2.7/dist-packages/PIL* $VIRTUAL_ENV/lib/python*/site-packages
这些命令在非 unixish 环境中可能略有不同。路径还取决于您使用的系统。为了找出库的路径,启动 python shell(没有激活的 virtualenv),导入模块并检查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
.