ChatGPT解决这个技术问题 Extra ChatGPT

Anaconda 导出环境文件

如何制作可在其他计算机上使用的 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 文件,因此您可以将其省略 - 请参阅 stackoverflow.com/questions/39280638/…
请注意,现在文档中有 good instructions for this;我猜最初写这些答案时,这部分并不存在。

M
M.Innat

我在 conda 规范中找不到任何允许您在没有 prefix: ... 行的情况下导出环境文件的内容。但是,就像评论中的 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 行。


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

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

$ 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 安装更好吗?这种方法有什么优点?
I
Ilyas

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

Windows conda env 导出 --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 版本和操作系统解开。


我同意这是一个很好的答案,但考虑添加一些细节,说明为什么排除构建信息对于跨平台传输环境很有用。
最终使用了这个,但好主意@merv。就是这样做的。
不幸的是,在不同的操作系统上安装导出和重新安装时,这并不总是有效。
像魅力一样工作。谢谢!
A
Arka Mukherjee

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

conda activate myenv

然后你只需要运行这个命令

conda env export > environment.yml

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


S
Savrige

首先激活您的 conda 环境(您要导出/备份的环境)

conda activate myEnv

将所有包导出到文件 (myEnvBkp.txt)

conda list --explicit > myEnvBkp.txt

恢复/导入环境:

conda create --name myEnvRestored --file myEnvBkp.txt

N
Nicole Finnie

我发现仅以字符串格式导出包比导出整个 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 并且它起作用了。事实证明,较低的补丁号已被主仓库删除。
B
Bo Scho

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

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 包。所以如果你有一些你应该手动添加它们(可以从完整的导出中复制)。
M
Mahmoud Nasr

对于 Windows 用户

打开 CMD Conda 激活 SpidersEnv conda env export > SpidersEnv.yml 然后浏览用户文件夹并搜索 SpidersEnv.yml

这也是backup(导出)您的环境的另一种方式