Anaconda导出环境文件


129

如何制作可以在其他计算机上使用的anaconda环境文件?

我使用将Anaconda python环境导出到YML conda env export > environment.yml。导出的environment.yml内容包含此行prefix: /home/superdev/miniconda3/envs/juicyenv,它映射到我的anaconda的位置,这在其他计算机上将有所不同。


7
我只是在做一些测试,以为我发现前缀被忽略了……不知道为什么它在env导出中。你应该能够做到 conda env create -f environment.yml 的,正如不谈,在我的经验,这是不会跨平台的工作,因为畅达ENV会列出许多相关性,如`vs2015_runtime`,如果你是在Windows上。但是,当然这在Linux上不可用。
亚历克斯·赖斯

4
康达居然建议创建的environment.yml手工文件,所以你可以离开它-见stackoverflow.com/questions/39280638/...
布赖恩·伯恩斯

Answers:


177

我在conda规范中找不到任何可让您导出环境文件的内容prefix: ...。但是,正如Alex在评论中指出的那样,从文件创建环境时,conda似乎并不关心前缀行。

考虑到这一点,如果您希望其他用户不了解您的默认安装路径,则可以grep在写入之前删除前缀行environment.yml

conda env export | grep -v "^prefix: " > environment.yml

无论哪种方式,另一个用户都可以运行:

conda env create -f environment.yml

并且该环境将安装在其默认的conda环境路径中。

如果您要指定与系统默认设置不同的安装路径(与environment.yml中的'prefix'不相关),只需使用-p标记后跟所需的路径即可。

conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

请注意,Conda建议environment.yml手动创建,这对于要跨平台(Windows / Linux / Mac)共享环境的用户尤其重要。在这种情况下,您可以省略该prefix行。


1
...出色!👍
金枪鱼

44

从要安装在另一台计算机上的环境中保存软件包的最简单方法是:

$ conda list -e > req.txt

然后您可以使用安装环境

$ conda create -n new environment --file req.txt

如果使用pip,请使用以下命令:reference https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt

很好,但是它似乎不适用于pip安装的软件包。
小鲍比表

1
谢谢,我刚刚根据给定的参考进行了更新
javac

我已经使用了Anaconda Navigator和pip(从环境中)安装东西。您会推荐我使用什么?这两个命令?
DA

我认为最好在Anaconda环境中使用conda命令,如果需要也可以使用pip
javac

9
  • 的Linux

    conda env导出-无构建| grep -v“前缀”> environment.yml

  • 视窗

    conda env export --no-builds | findstr -v“前缀”> environment.yml


基本原理:默认情况下,conda env export包括构建信息:

$ conda env export
...
dependencies:
  - backcall=0.1.0=py37_0
  - blas=1.0=mkl
  - boto=2.49.0=py_0
...

您可以转而无需构建信息即可导出环境:

$ conda env export --no-builds
...
dependencies:
  - backcall=0.1.0
  - blas=1.0
  - boto=2.49.0
...

这使环境与Python版本和OS脱钩。


1
我同意这是一个很好的答案,但是请考虑添加一些详细信息,以说明为什么排除构建信息对于跨平台传输环境很有用。
merv

最终使用了这个,但是好主意@merv。就是那样。
弗朗索瓦·勒布朗

不幸的是,当在不同的操作系统上安装导出和重新安装时,这并不总是可行。
索伦

2

我发现仅以字符串格式导出软件包比导出整个conda环境更方便。正如前面的答案已经建议的那样:

$ conda list -e > requirements.txt

但是,它requirements.txt包含内部版本号,这些版本号在操作系统之间(例如Mac和之间)不可移植Ubuntu。在conda env export我们可以选择--no-builds但没有的情况下conda list -e,因此我们可以通过发出以下命令来删除内部版本号:

$ sed -i -E "s/^(.*\=.*)(\=.*)/\1/" requirements.txt 

并在另一台计算机上重新创建环境:

conda create -n recreated_env --file requirements.txt 

sed命令效果很好。我必须删除补丁程序版本。所以major.minor.patchmajor.minor和它的工作。原来,较低的补丁号已被主存储库丢弃。
卢卡斯

1
  1. 首先激活您的conda环境(您要导出/备份的环境)
conda activate myEnv
  1. 将所有包导出到文件(myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. 恢复/导入环境:
conda create --name myEnvRestored --file myEnvBkp.txt
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.