将共享python包添加到多个virtualenvs

Mat*_*kin 9 python pip virtualenv virtualenvwrapper

当前的Python工作流程

我将pip,distribute,virtualenvvirtualenvwrapper安装到我的Python 2.7站点包(Mac OS X上的Python安装框架)中.在我的~/.bash_profile我有线

export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
Run Code Online (Sandbox Code Playgroud)

这给出了如下工作流程:

$ mkvirtualenv pip-test
$ pip install nose        # downloaded and installed from PyPi
$ pip install mock        # downloaded and installed from PyPi
$ mkvirtualenv pip-test2
$ pip install nose        # installed from pip's download cache
$ pip install mock        # installed from pip's download cache
Run Code Online (Sandbox Code Playgroud)

问题

由于我没有下载以前安装在另一个virtualenv中的软件包,因此该工作流程可以节省时间和带宽.但是,它不会节省磁盘空间,因为每个软件包都将安装到每个virtualenv中.因此,我想知道:

  • 问题#1是否对此工作流程进行了修改,以便通过让多个virtualenv引用一个安装在我的Python 2.7站点包中的Python包来节省磁盘空间?

我尝试过使用add2virtualenv,这是virtualenvwrapper的一部分.虽然这"将指定的目录添加到当前活动的virtualenv的Python路径中",但它不会添加virtualenv/bin目录中找到的任何可执行文件.因此,以下将失败:

$ mkvirtualenv pip-test3
$ add2virtualenv ~/.virtualenvs/pip-test/lib/python2.7/site-packages/nose/
$ nosetests   # Fails since missing ~/.virtualenvs/pip-test3/bin/nosetests
Run Code Online (Sandbox Code Playgroud)
  • 问题#2我错过了一些关于这种方式的方法add2virtualenv吗?
  • 问题#1改述是否有比add2virtualenv更好的方法,允许多个virtualenvs引用一个安装在我的Python 2.7站点包中的Python包?
  • 问题#3如果有一种方法可以将共享Python软件包安装到多个virtualenvs中,那么与在每个virtualenv中单独安装Python软件包相比,是否存在性能损失?
  • 问题#4我是否应该放弃节省磁盘空间并坚持使用当前的工作流程?

Bra*_*des 11

除非您在嵌入式系统上进行开发,否则我发现以这种方式追逐磁盘空间总是适得其反.我需要很长时间才能实现这一目标,因为当一个非常大的硬盘驱动器只有几兆字节的时候我长大了,并且用K来衡量RAM.但是今天,除非你受到非常特殊和不寻常的限制,否则让你的项目正交(你可以在项目之外的任何地方删除你的系统上的任何目录,并让它的Python包仍在那里)似乎总是远远超过磁盘空间的好处,如果你正忙着开发,你会从来没有 - 根据我的经验 - 甚至还是注意到了.

所以我想这是我根据自己的经验提供的教训:你永远不会注意到你丢失的磁盘空间,但是如果你想要清理磁盘上某个位置的目录,就会发现它正在开发中别的地方.