2013-10-05 270 views
2

我在之前创建的一个虚拟环境(venv1)中安装了一些python软件包(使用pip,它会自动下载软件包及其依赖项),现在我需要创建另一个包含子集的虚拟环境(venv2)安装在venv1。但是我怎样才能不使用互联网?我找出了一些想法,但我不知道他们是可能的:如何在虚拟环境中重新安装已安装的python软件包?

  • 通过复制venv1到venv2和卸载不需要的包
  • 通过从venv1复制在站点包的包目录venv2
  • 通过从venv1中提取一个一个的包文件,然后创建文件setup.py,根据它填写并安装在venv2中(希望不会,因为它会很繁琐并且可能会引入错误)
  • 也许有一种方法可以生成蛋从已安装的软件包或使用任何工具提取它?怎么样?

那么有什么更好的方法来做到这一点?

感谢

+0

为什么选择投票? – juliocesar

回答

2

如果除了virtualenv您使用virtualenvwrapper(非常推荐),你可以复制与

然后在虚拟环境中,你去与workon venv2新环境,你卸载你不需要的软件包。

0

我想说复制venv是最简单的选择。然而,在这种情况下,创造了第一VENV时,您需要使用--relocatable标志:

$ virtualenv --help 
... 

--relocatable   Make an EXISTING virtualenv environment relocatable. 
         This fixes up scripts and makes all .pth files 
         relative 

例如:

$ virtualenv --relocatable venv1 
$ venv1/pip/install somepackage 
$ cp venv1 venv2 

然后你就可以在VENV只需使用cp

否则你的venv将不可复制/移动,因为它包含绝对路径。

+0

你应该能够复制'site-packages'下的东西;确保你查看'.pth'文件并相应地更改路径。 –

+0

使用--relocatable得到了一些问题,所以我找到了https://github.com/fireteam/virtualenv-tools我会测试它 – juliocesar

相关问题