57

可能重复:
使 virtualenv 从您的全局站点包继承特定包

有没有办法virtualenv为 Python 创建一个并指定应该从系统范围的安装中使用(继承)哪些包,以及应该从系统范围的安装中忽略哪些包?

更具体地说,例如,有一个系统范围的安装:

numpy
scipy
matplotlib

我想创建一个虚拟环境,这样:

  • 使用系统范围的安装numpyscipy
  • 忽略系统范围的matplotlib,并让我安装/升级我自己的版本(使用pip -U matplotlib)。

这可能吗?

4

1 回答 1

83

最简单的方法是创建一个包含系统站点包的 virtualenv,然后安装您需要的版本:

$ virtualenv --system-site-packages foo
$ source foo/bin/activate
$ pip install Django==1.4.3

pip freeze之后,您还可以通过检查输出并删除不需要的包来清理 virtualenv 。(删除 system-site-packagespip 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.

于 2013-01-28T21:34:31.653 回答