virtualenv:指定系统范围与本地使用的软件包

Ame*_*ina 48 python pip virtualenv

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

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

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

numpy
scipy
matplotlib
Run Code Online (Sandbox Code Playgroud)

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

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

这可能吗?

bik*_*der 69

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

$ virtualenv --system-site-packages foo
$ source foo/bin/activate
$ pip install Django==1.4.3
Run Code Online (Sandbox Code Playgroud)

您也可以通过检查输出pip freeze和删除不需要的包来清理virtualenv .(删除system-site-packages 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
Run Code Online (Sandbox Code Playgroud)

在非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']
Run Code Online (Sandbox Code Playgroud)

  • 符号链接有效,但是如果包具有其他依赖关系,那么你将不得不去寻找所有那些并将它们链接起来. (6认同)