如何复制virtualenv


130

我有一个现有的virtualenv,其中包含很多软件包,但是旧版本的Django。

我想要做的就是复制此环境,因此我有另一个环境,它们的软件包完全相同,但是 Django的更新版本。我怎样才能做到这一点?


3
我会将所有需求冻结到一个“ requirements.txt”文件中,然后创建另一个virtualenv并运行pip install requirements.txt
Calvin Cheng

如果要复制的虚拟环境的python版本与默认的python环境不同,则可以将新环境设置为virtualenv -p /path/to/older/venv/bin/python new_venv,然后使用requirements.txtpip freeze
GiriB

Answers:


183

最简单的方法是使用pip生成需求文件。需求文件基本上是一个文件,其中包含要安装(或在pip生成文件的情况下已经安装)所有python软件包的列表,以及它们的版本。

要生成需求文件,请进入原始的virtualenv,然后运行:

pip freeze > requirements.txt

这将为您生成requirements.txt文件。如果您在喜欢的文本编辑器中打开该文件,则会看到类似以下内容的内容:

Django==1.3
Fabric==1.0.1
etc...

现在,编辑这行Django==x.xDjango==1.3(或任何版本要在新的virtualenv安装)。

最后,激活新的 virtualenv并运行:

pip install -r requirements.txt

然后pip会自动下载并安装您requirements.txt文件中列出的所有python模块,无论您使用的是哪个版本!


3
谢谢!在谷歌上搜索时,我发现了很多嘈杂,混乱和混乱的页面……您的解决方案是如此简洁明了……这让我很开心;)
dolma33 2011年

如果我复制文件夹然后将其粘贴到另一台计算机上怎么办?会行吗?假定可以解决依赖关系的问题
TalesPádua'16

确实没有,正如我刚才发现的那样。
horcle_buzz

我看到很多消息Could not find a version that satisfies the requirement a_package=#.#.#可以轻松解决吗?我删除了一行或将等式更改为不等式。
世界变化

适用于pyenv为好。很棒的答案。
伦纳德

29

另一种选择是使用virtualenv-clone包:

用于克隆不可重定位的virtualenv的脚本。


嗨,我是否正确地假设这允许我将整个Python环境复制到文件中。然后,我只需要将此文件加载到新的计算机/操作系统中,就可以重新安装所有站点软件包
aceminer

2
“ virtualenv-clone源/目标/”的工作非常吸引人!
ajankuv

确保我们virtualenv-clone在激活virtualenv之后安装
4givN

15

virtualenvwrapper提供复制虚拟环境命令

cpvirtualenv ENVNAME [TARGETENVNAME]

7
这不是一个好主意。“复制虚拟环境没有得到很好的支持。每个virtualenv都有硬编码的路径信息,在某些情况下,复制代码可能不知道需要更新特定文件。请谨慎使用。”
Temak

5

如果您正在使用Anaconda,则可以运行:

conda create --name myclone --clone myenv

这将复制myenv到名为的新创建的环境myclone


4

最简单的选择是使用virtualenv-clone软件包。

要复制venv1venv2,请按照以下步骤操作:

  1. 安装virtualenv-clone在任一venv1或虚拟的虚拟环境venv_dummy。创建venv_dummy

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. 要安装virtualenv-clone

    (venv_dummy): pip install virtualenv-clone
  3. 复制venv1venv2

    (venv_dummy): virtualenv-clone venv1/ venv2/

bash中的提示未更改,必须编辑bin /激活,并且不能100%清除操作方式
MrR

@MrR .. bin/activate如果您遵循此答案,则无需编辑。为什么要编辑bin/activate
萨夫万

我克隆后,我迅速在bash有原始的环境名称,因为内PS1节bin/activate
MRR

1

您能不能简单地:

  • 将现有的虚拟环境目录复制到新目录
  • 更新到新的Django?

7
有时我会使用这种方法,但是不方便更新bin / activate脚本中的某些路径。
ArmandoPérezMarquss

3
更改是对环境名称的引用的简单查找和替换,还是比这更复杂?
格雷格

1
以我
为例

1
另一方面,更改bin / activate确实是一个hack,因此必须怀疑这是否会在某些时候破坏东西。尤其是在生产设置中使用虚拟环境时。
赫伯特

2
它确实破坏了很多东西。重新创建或克隆virtualenv更容易。我试图做到这一点(在等待代理服务器打开时,以便我可以重新安装所有必需的软件包,然后从头开始),但是它不起作用!我以为我很聪明,但是,las,要启动并运行它,将需要很多黑客工作,老实说,还有很多事情要做。
horcle_buzz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.