让 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
现在,此设置效果很好,因为它执行以下操作:
- 每个项目在其相应的环境中都有自己的依赖项
- 我可以通过克隆脚本文件、创建新的 virtualenv 并执行
pip install -r requirements.txt
轻松地将这个项目重新部署到其他地方
此设置的主要缺点是我在多个虚拟环境中拥有相同包的多个副本。我经常为每个虚拟环境分配几百兆内存。
我的问题是:
有没有办法在多个虚拟环境之间共享包?
我尝试过但不起作用的方法:
virtualenv --system-site-packages
。这使得系统级包在 virtualenv 中可用但是:
- 这使得无法获得特定依赖项的列表
- 我不能安装我需要的相同依赖项的多个版本(例如 pandas 0.16 vs pandas 0.15),因为不同的项目有不同的需求。
virtualenv --extra-search-dir=/path/to/dist
仅适用于 pip,AFAICT,所以对我不利。
废掉评论,也许我知道答案。似乎 Anaconda 的包管理系统确实使用了符号链接。所以这基本上是一个 virtualenv 但具有您想要的功能。看这里:
也就是说,使用 Conda 的初始硬盘成本很高,因此请多调查一下并确定它是否适合您。
我的布局如下:
我在 ~/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
轻松地将这个项目重新部署到其他地方
此设置的主要缺点是我在多个虚拟环境中拥有相同包的多个副本。我经常为每个虚拟环境分配几百兆内存。
我的问题是:
有没有办法在多个虚拟环境之间共享包?
我尝试过但不起作用的方法:
virtualenv --system-site-packages
。这使得系统级包在 virtualenv 中可用但是:
- 这使得无法获得特定依赖项的列表
- 我不能安装我需要的相同依赖项的多个版本(例如 pandas 0.16 vs pandas 0.15),因为不同的项目有不同的需求。
virtualenv --extra-search-dir=/path/to/dist
仅适用于 pip,AFAICT,所以对我不利。
废掉评论,也许我知道答案。似乎 Anaconda 的包管理系统确实使用了符号链接。所以这基本上是一个 virtualenv 但具有您想要的功能。看这里:
也就是说,使用 Conda 的初始硬盘成本很高,因此请多调查一下并确定它是否适合您。