Anaconda 导出环境文件

Posted

技术标签:

【中文标题】Anaconda 导出环境文件【英文标题】:Anaconda export Environment file 【发布时间】:2017-05-07 12:57:24 【问题描述】:

如何制作可以在其他电脑上使用的anaconda环境文件?

我使用 conda env export > environment.yml 将我的 anaconda python 环境导出到 YML。导出的 environment.yml 包含这一行 prefix: /home/superdev/miniconda3/envs/juicyenv 映射到我的 anaconda 的位置,这在其他电脑上会有所不同。

【问题讨论】:

我只是在做一些测试,并认为我发现前缀被忽略了......不确定为什么它在 env 导出中。你应该能够做到conda env create -f environment.yml 顺便说一句,根据我的经验,这不会跨平台工作,因为如果你在 Windows 上,conda env 将列出许多依赖项,例如 `vs2015_runtime`。当然,这在 linux 上是不可用的。 Conda 实际上建议手动创建 environment.yml 文件,因此您可以将其省略 - 请参阅 ***.com/questions/39280638/… 请注意,现在文档中有good instructions for this;我猜在最初写这些答案时这部分并不存在。 【参考方案1】:

我在conda 规范中找不到任何允许您在没有prefix: ... 行的情况下导出环境文件的内容。但是,正如 cmets 中的 Alex pointed out 一样,conda 在从文件创建环境时似乎并不关心前缀行。

考虑到这一点,如果您希望其他用户不知道您的默认安装路径,您可以在写信给environment.yml 之前删除带有grep 的前缀行。

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

无论哪种方式,其他用户都会运行:

conda env create -f environment.yml

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

如果您想指定与系统默认安装路径不同的安装路径(与 environment.yml 中的“前缀”无关),只需使用 -p 标志,后跟所需路径。

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

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

【讨论】:

...eggcellent! ? 我猜prefix 在同一台机器上使用时有助于更快地创建新环境,但我没有太多证据证明这一说法。我曾经在没有prefix 的情况下运行,它必须下载一些以前不需要的额外包。然而,这只发生了一次,所以也许在那之后它们被缓存在系统级别(?)所以,不需要共享,但在自己使用时可能是可取的。【参考方案2】:

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

$ conda list -e > req.txt

然后你可以使用安装环境

$ conda create -n <environment-name> --file req.txt

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

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

【讨论】:

不错,但它似乎不适用于 pip 安装的软件包。 谢谢我刚刚根据给定的参考更新了 我已经使用了 Anaconda Navigator 和 pip(来自环境内部)来安装东西。你会推荐我用什么?两个命令? 我觉得在Anaconda环境下使用conda命令比较好,如果需要也可以使用pip 这种方法比从 *.yml 安装更好吗?这种方法有什么好处?【参考方案3】:

Linux

conda env 导出 --no-builds | grep -v "前缀" > environment.yml

窗户

conda env 导出 --no-builds | findstr -v "prefix" > 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 版本和操作系统分开。

【讨论】:

我同意这是一个很好的答案,但请考虑添加一些详细信息,说明为什么排除构建信息对于跨平台传输环境很有用。 最终使用了这个,但好主意@merv。就是这样做的。 不幸的是,在不同的操作系统上安装导出和重新安装时,这并不总是有效。 工作就像一个魅力。谢谢!【参考方案4】:
    首先激活您的 conda 环境(您要导出/备份的环境)
conda activate myEnv
    将所有包导出到文件 (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
    恢复/导入环境:
conda create --name myEnvRestored --file myEnvBkp.txt

【讨论】:

【参考方案5】:

首先激活您的 Conda 环境(下面,myenv 是环境的假定名称)。

conda activate myenv

那么你只需要运行这个命令

conda env export > environment.yml

请注意,您可以将 environment.yml 替换为您选择的任何其他文件名。

【讨论】:

【参考方案6】:

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

$ conda list -e > requirements.txt

但是,这个requirements.txt 包含不能在操作系统之间移植的内部版本号,例如在MacUbuntu 之间。在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 并且它起作用了。事实证明,较低的补丁号已被主仓库删除。【参考方案7】:

对我来说,康达给出的程序有效:

https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#sharing-an-environment

但只有在 anaconda 提示/控制台中执行。

VSCode 终端只生成了一个 yml 文件,其中包含指向我的环境的路径,但在依赖项中没有明确的包列表。

【讨论】:

特别是,似乎所需的步骤在子部分Exporting an environment file across platforms 中。我猜这个文档直到最近才存在。虽然使用--from-history 选项,但不包括pip 包。所以如果你有一些你应该手动添加它们(可以从完整的导出中复制)。

以上是关于Anaconda 导出环境文件的主要内容,如果未能解决你的问题,请参考以下文章

Anaconda下载及安装保姆级教程(详细图文)

Python + Anaconda + vscode环境重装(2019.4.20)

Anaconda conda常用命令:从入门到精通

卸载 Anaconda 后如何卸载 Anaconda 环境

anaconda环境搭建

在Anaconda虚拟环境中pip安装的包无法使用