如何复制virtualenv

dol*_*a33 117 python django virtualenv

我在virtualenv中有一个现有的环境,有很多软件包,但是有一个旧的Django版本.

如果我想要复制这个环境怎么办,
那么我可以在另一个环境中安装更新的Django版本,
但保留已经在其他环境中的所有软件包?

rde*_*ges 163

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

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

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

Django==1.3
Fabric==1.0.1
etc...
Run Code Online (Sandbox Code Playgroud)

现在,编辑说Django==x.x出来的行Django==1.3(或者您要在新的virtualenv中安装的任何版本).

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

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

并且pip将自动下载并安装您的requirements.txt文件中列出的所有python模块,无论您指定的版本是什么!

  • 如果我复制文件夹然后将其粘贴到另一台机器上会怎样?它会起作用吗?假设当然解决了 apt-get 依赖项 (2认同)
  • 我看到很多消息“无法找到满足要求的版本a_package=#.#.#”我可以轻松解决吗?我删除了一条线或将等式更改为不等式。 (2认同)

ale*_*cxe 26

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

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

  • “virtualenv-clone 源/目标/”就像一个魅力,谢谢! (2认同)

Ray*_*ond 12

virtualenvwrapper提供复制virtualenv命令

cpvirtualenv ENVNAME [TARGETENVNAME]
Run Code Online (Sandbox Code Playgroud)

  • 不是一个好主意."复制虚拟环境不受支持.每个virtualenv都有路径信息硬编码到其中,并且可能存在复制代码不知道需要更新特定文件的情况.请谨慎使用." (6认同)

Jor*_*dan 8

如果您使用的是Anaconda,则只需运行:

conda create --name myclone --clone myenv
Run Code Online (Sandbox Code Playgroud)

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


Saf*_*wan 7

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

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

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

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装virtualenv-clone

    (venv_dummy): pip install virtualenv-clone
    
    Run Code Online (Sandbox Code Playgroud)
  3. 复制venv1venv2

    (venv_dummy): virtualenv-clone venv1/ venv2/
    
    Run Code Online (Sandbox Code Playgroud)

  • 如果名称没有根据@MrR更改,则转到新环境“bin/activate”文件并搜索旧环境名称并设置新名称。瞧!将出现 2 次重命名。祝你好运!! (3认同)
  • @MrR 这听起来像是 virtualenv-clone 中的一个错误或疏忽,但不应该真正影响行为。 (2认同)