让 virtualenv 共享已经存在的站点包?

Make virtualenv share already existing site-packages?

我的布局如下:

我在 ~/projects 下有各种不同的 python 项目,每个项目都具有以下结构:

~/projects/$project_name/env                      #This is the virtualenv
~/projects/$project_name/scripts                  #This is where the code actually lives
~/projects/$project_name/scripts/requirements.txt #This helps keep track of this project's dependencies

现在,此设置效果很好,因为它执行以下操作:

  1. 每个项目在其相应的环境中都有自己的依赖项
  2. 我可以通过克隆脚本文件、创建新的 virtualenv 并执行 pip install -r requirements.txt
  3. 轻松地将这个项目重新部署到其他地方

此设置的主要缺点是我在多个虚拟环境中拥有相同包的多个副本。我经常为每个虚拟环境分配几百兆内存。

我的问题是:

有没有办法在多个虚拟环境之间共享包?

我尝试过但不起作用的方法:

virtualenv --system-site-packages。这使得系统级包在 virtualenv 中可用但是:

  1. 这使得无法获得特定依赖项的列表
  2. 我不能安装我需要的相同依赖项的多个版本(例如 pandas 0.16 vs pandas 0.15),因为不同的项目有不同的需求。

virtualenv --extra-search-dir=/path/to/dist 仅适用于 pip,AFAICT,所以对我不利。

废掉评论,也许我知道答案。似乎 Anaconda 的包管理系统确实使用了符号链接。所以这基本上是一个 virtualenv 但具有您想要的功能。看这里:

也就是说,使用 Conda 的初始硬盘成本很高,因此请多调查一下并确定它是否适合您。