virtualenv:指定哪些软件包使用系统范围vs本地

可能重复:
让virtualenv从您的全球网站包inheritance特定的包

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

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

 numpy scipy matplotlib 

我想创build一个虚拟环境,以便:

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

这可能吗?

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

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

您也可以通过检查pip freeze的输出并删除不需要的软件包来清理virtualenv。 (使用pip uninstall删除系统站点包不再适用于较新版本的virtualenv)

另一种方法是创build一个干净的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环境下,这些命令可能会略有不同。 path也取决于您正在使用的系统。 为了find启动python shell的path(没有激活的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']