如何复制 Virtual alenv

我有一个现有的 Virtual alenv 包含很多软件包,但是有一个老版本的 Django。

我想做的是 复制品这个环境,所以我有另一个环境与完全相同的软件包 但是一个新版本的 Django。我怎么能这么做?

127734 次浏览

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

要生成一个需求文件,进入原始的 viralenv,然后运行:

pip freeze > requirements.txt

这将为您生成 要求文件。如果您在您最喜欢的文本编辑器中打开该文件,您将看到如下内容:

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

现在,编辑表示 Django==x.x的那一行,将其改为表示 Django==1.3(或者您希望在新的 viralenv 中安装的任何版本)。

最后,激活你的 新的 viralenv,然后运行:

pip install -r requirements.txt

然后 pip 会自动下载并安装 要求文件中列出的所有 python 模块,不管你指定了什么版本!

你就不能简单地说:

  • 将现有的虚拟 env 目录复制到新的目录
  • 有新姜戈的消息吗?

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

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

virtualenvwrapper提供 命令复制 viralenv

cpvirtualenv ENVNAME [TARGETENVNAME]

如果你正在使用 水蟒,你可以直接运行:

conda create --name myclone --clone myenv

这将把 myenv复制到新创建的称为 myclone的环境中。

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

要将 venv1复制到 venv2,请遵循以下步骤:

  1. venv1或虚拟虚拟环境 venv_dummy中安装 virtualenv-clone。创建 venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
    
  2. To install virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
    
  3. To duplicate venv1 to venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/
    

以防你用 pip venv。我复制粘贴的文件夹持有虚拟环境和手动更改文件夹中的 bin 文件夹的复制文件夹。 我不知道它是否有效,但它工作!

下面是克隆 python 虚拟环境的 go 命令。

packs=`source-path/bin/pip freeze` && python3 -m venv <env-name> && target-path/bin/pip install $packs

上述命令中使用的约定:

  • Source-path = 您想要克隆的 env 路径,例如 /home/john/envs/oldenv
  • Env-name = 克隆的 env 的名称,例如 myenv,它也可以是一个路径。 /home/john/envs/myenv
  • Target-path = 到新克隆的 env 的路径,例如 /home/john/envs/<env-name>

使用这个的优点或者为什么我更喜欢这个

  1. 不需要生成 requments.txt 文件。
  2. 在克隆过程中没有环境被激活/停用。
  3. 执行单个命令(同时运行3个命令)。

在某些情况下,您可能希望在克隆 env 时排除全局包,您可以将 source-path/bin/pip freeze替换为 source-path/bin/pip freeze --local,更多关于 --local 给你的信息