Python 是否使virtualenv共享现有的站点包?

Python 是否使virtualenv共享现有的站点包?,python,virtualenv,Python,Virtualenv,我的布局如下: 我在~/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/require

我的布局如下:

我在~/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
现在,此设置非常有效,因为它可以执行以下操作:

  • 每个项目在其相应的环境中都有自己的依赖项
  • 我可以通过克隆脚本文件、创建新的virtualenv并执行
    pip install-r requirements.txt
  • 此设置的主要缺点是,我在多个虚拟环境中拥有相同软件包的多个副本。我经常会在每个虚拟环境中使用几百兆

    我的问题是:

    有没有办法在多个VirtualNV之间共享软件包?

    我尝试过但不起作用的事情:

    virtualenv——系统站点包
    。这使得virtualenv中的系统级软件包可用,但:

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

  • virtualenv--extra search dir=/path/to/dist
    只对pip、AFAICT有效,所以对我不好。

    放弃评论,也许我知道答案。看起来好像Anaconda的软件包管理系统确实使用了符号链接。因此,这基本上是一个虚拟电视,但有你想要的功能。请看这里:


    这就是说,使用Conda需要大量的初始硬盘成本,所以请多调查一下,确定它是否适合您

    我相信这个想法与虚拟环境的目的有些矛盾。我个人会保持现状。很抱歉,这不是对您问题的直接回答。@Maarten是的,是的。尽管我倾向于同意存储问题并非无关紧要。我空间不足的部分原因是这个。我认为这是个坏主意的部分原因是Virualenv不仅仅是软件包,它们是软件包的版本。如果您的所有模块中都有版本为1.5的x软件包,而其中一个模块需要1.6,会发生什么情况?从理论上讲,依赖项的重叠应该比看起来少很多。@Neil我同意virtualenv希望跟踪各个软件包版本(这样做很有用!)。我不喜欢的是,如果我有3个相同版本的项目,我就有3个代码副本。作为一名黑客,我认为您可以通过将所有pandas版本放在一个公共repo中,并在
    env/lib/python3.5/site packages
    中“适当”设置符号链接来解决这个问题。“适当”的意思不是微不足道的,但看起来是可行的。