如何在另一台机器上克隆Python工作环境?


26

我在工作站上使用Python(Anaconda + Flask)开发了机器学习模型,一切顺利。后来,我尝试将该程序发送到另一台计算机上,当然我尝试在该计算机上设置相同的环境,但是该程序无法运行。我将该程序复制到了其他计算机上,该计算机也可以平稳运行。

我无法弄清楚失败情况下的问题是什么(程序代码和错误消息都很丰富,所以我无法在此处显示它们),但是我几乎可以肯定这是依赖版本不同的问题。

因此,我的问题是,在某个程序可以正常运行的环境中,如何将其克隆到另一个程序也应该可以正常运行的环境?当然,无需克隆整个系统;)


使用conda env导出。
kbrose

Answers:


39

首先,这是一个Python / Anaconda问题,应该在其他堆栈交换子站点中进行询问。


至于问题本身,您可以使用以下命令导出Anaconda环境:

conda env export > environment.yml

并使用以下命令重新创建它:

conda env create -f environment.yml

请注意,正如其他建议一样,您应该使用虚拟环境,该虚拟环境允许您创建与计算机环境分开的特定环境,并更轻松地对其进行管理。

要在Anaconda中创建虚拟环境,您可以使用:

conda create -n yourenvname python=x.x anaconda

您可以使用以下方法激活它:

source activate yourenvname

Anaconda文档在使用conda createconda env create共享/重新创建环境时不清楚。您能否进一步详细说明为什么建议conda env create在这种情况下使用?
Tanguy

您可以找到有关之间的差异的一些注意事项conda create,并conda env create在这里:groups.google.com/a/continuum.io/forum/#!topic/conda/... 这么说,我觉得你通常可以互换使用。
ginge

1
我已经看过这个线程了,但是我正试图准确地理解在哪种情况下应该优先使用每个选项(conda createvs conda env create)以及每个选项的不利之处(例如:“ [ conda env create是用于]使用pip的软件包已安装到其中的环境。 ,这会导致额外的复杂性”:它会增加哪种额外的复杂性?)。
Tanguy

我想问一下运行时conda env create -f environment.yml,这会导致错误,因为yml文件中的virtenv名称已经被使用了。将名称更改为您要解决的新virtenv。
GiangNguyễn

这样可以挽救您的生命!如果您是根据Anaconda管理环境页面上的说明从文件创建环境的,则在使用其他平台时不起作用。conda list --explicit > FILE_NAME导出当前平台的二进制文件,显然不能在另一个平台上工作。
Shayan Amani

5

查看“容器”,例如Docker(https://www.docker.com/what-c​​ontainer),这是虚拟化的一种更轻量级的替代方案。

这将需要一些时间投资,但最终会带来很多好处。

在链接中,我用粗斜体标出了您的特定需求:

将软件打包到标准化单元中,以进行开发,运输和部署

容器映像是一个软件的轻量级独立可执行软件包,包括运行该映像所需的一切:代码,运行时,系统工具,系统库,设置。无论环境如何容器化软件都可用于基于Linux和Windows的应用程序,并且始终可以运行相同的软件。容器将软件与其周围环境隔离开来,例如,开发环境和登台环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。


5

使用以下命令对当前conda环境进行首次导出环境配置:

conda-env  export -n your_env_name > your_env_name.yml

例:

conda-env  export -n base> base.yml

运行上述命令后,它们应该是当前目录中的yml配置文件,其中包含conda环境的信息

要使用yml配置文件创建新环境,请运行:

conda-env create -n new_env -f=\path\to\base.yml 

例:

conda-env create -n venv -f=base.yml

如果以上操作无效(由于conda本身的各种问题),请尝试以下变体,始终值得一试:

conda-env create --name new_env --file \path\to\base.yml 

4

如果您的程序主要是Python,则可以完全依靠虚拟环境。

创建虚拟环境来隔离您的依赖关系,而不是使用系统库。然后使用虚拟环境工具复制您的环境。

在工作的virtualenv中,使用每个已安装的Python库的版本创建一个文件:

pip freeze > requirements.txt

在新的virtualenv,请pip安装这些库的版本相同:

pip install -r requirements.txt

这样可以确保在两台计算机上获得相同的lib版本。并且由于VCS跟踪了requirements.txt,因此您始终可以重新创建旧版本代码的环境。

当然,如果您需要数据库,生产Web服务器等,则最终需要执行更多步骤,并且不能依靠virtualenv来确保两个环境都匹配。这就是Docker 介入的地方(请参阅Pieter21的答案)。


我没有注意到anaconda您问题上的标签。我对此没有经验,但是要小心。我认为anaconda具有管理环境和同时使用anaconda的独特方式,这virtualenv可能会给您带来麻烦。但是,我认为anaconda应该提供相同的功能。
杰罗姆

1

本文档页面的最后开始

保存软件包以备将来使用:

conda list --export > package-list.txt

从导出文件重新安装软件包:

conda create -n myenv --file package-list.txt

1

对基于另一种方法创建环境的现有方法的总结:

  • 克隆环境

    • 在现有环境中:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • 从同一台计算机上的导出环境文件中:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • 从另一台计算机上的导出环境文件中:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
      

$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. Sun

0

一线

conda create --clone source_env --name destination_env

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.