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

如何在虚拟环境中重新安装已安装的python包?,python,virtualenv,pip,Python,Virtualenv,Pip,我已经在我之前创建的虚拟环境(venv1)中安装了一些python软件包(使用pip,它会自动下载软件包及其依赖项),现在我需要创建另一个虚拟环境(venv2),并在venv1中安装软件包的子集。但我怎么能不使用互联网呢?我想出了一些想法,但我不确定它们是否可行: 通过将venv1复制到venv2并卸载不需要的软件包 通过将站点包中的包目录从venv1复制到venv2 通过从venv1中逐个提取软件包文件,然后创建文件setup.py,根据填写并在venv2中安装(希望不要,因为这样会很繁琐,

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

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


谢谢

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

cpvirtualenv venv1 venv2

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

我认为复制venv是最简单的选择。但是,在这种情况下,在创建第一个venv时,需要使用
--relocate
标志:

$ 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将不可复制/移动,因为它包含绝对路径。

您应该能够只复制
网站包下的内容。
;请确保查看
.pth
文件并相应地更改路径。使用--relocatable时遇到一些问题,因此我发现我将测试它。为什么投票失败?