如何在虚拟环境中重新安装已安装的python包?

时间:2013-10-05 22:43:14

标签: python virtualenv pip

我在之前创建的虚拟环境(venv1)中安装了一些python包(使用pip,它自动下载了包及其依赖项),现在我需要创建另一个虚拟环境(venv2),其中包含一个子集在venv1中安装的软件包。但是如果不使用互联网怎么办呢?我想出了一些想法,但我不确定它们是否可能:

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

那么更好的方法是什么?

由于

2 个答案:

答案 0 :(得分:2)

如果除virtualenv之外您使用的是virtualenvwrapper(非常推荐),您可以使用

复制虚拟环境
cpvirtualenv venv1 venv2

然后使用workon venv2进入新环境,然后卸载不需要的软件包。

答案 1 :(得分: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将无法复制/移动,因为它包含绝对路径。