如何使用 .yml 文件更新现有的 Conda 环境
Posted
技术标签:
【中文标题】如何使用 .yml 文件更新现有的 Conda 环境【英文标题】:How to update an existing Conda environment with a .yml file 【发布时间】:2017-07-10 05:18:17 【问题描述】:如何使用另一个 .yml 文件更新预先存在的 conda 环境。这在处理具有多个需求文件的项目时非常有用,例如 base.yml, local.yml, production.yml
等。
例如,下面是一个base.yml
文件,其中包含 conda-forge、conda 和 pip 包:
base.yml
name: myenv
channels:
- conda-forge
dependencies:
- django=1.10.5
- pip:
- django-crispy-forms==1.6.1
实际环境是通过以下方式创建的:
conda env create -f base.yml
.
稍后,需要将额外的包添加到base.yml
。另一个文件,比如local.yml
,需要导入这些更新。
之前的尝试包括:
使用导入定义创建local.yml
文件:
channels:
dependencies:
- pip:
- boto3==1.4.4
imports:
- requirements/base.
然后运行命令:
conda install -f local.yml
。
这不起作用。有什么想法吗?
【问题讨论】:
是否可以更新当前激活的环境??我刚试过这个,但更新到了 yml 文件中命名的环境。 这可能对从头开始有用:conda env create -f ~/CoqGym/coq_gym.yml
(请参阅:***.com/questions/54492671/…)
【参考方案1】:
尝试使用conda env update:
conda activate myenv
conda env update --file local.yml --prune
--prune
卸载从@987654327@ 中删除的依赖项,正如@Blink 在this answer 中指出的那样。
或者不需要激活环境(感谢@NumesSanguis):
conda env update --name myenv --file local.yml --prune
请参阅 Conda 用户指南中的 Updating an environment。
【讨论】:
-f
和 file.yml
之间不需要等号。删除等号将使制表符完成在.yml
文件名上工作。
添加--name env_name
以忽略local.yml
中的任何name: foo
标签。还可以防止需要先激活 myenv。完整命令:conda env update --name env_name --file local.yml
来自:***.com/a/45525593/3399066 的评论
在最新的 conda 版本中,我认为我们使用“conda activate myenv”而不是“source activate myenv”
有什么办法,我们可以传递一个参数,这个命令将只更新 .yml 文件中的可用库,这将确保当列出的任何库不可用时不会引发错误?
确保 YAML 文件没有 name
参数,否则它会使用此 update 命令创建【参考方案2】:
建议的答案部分正确。您还需要添加 --prune 选项来卸载从 environment.yml 中删除的软件包。 正确的命令:
conda env update -f local.yml --prune
【讨论】:
即使是 --prune 标志也不足以删除 pip 安装的依赖项... 是的。我认为它将删除 conda 依赖项,但不会删除 pip 下列出的依赖项 有什么办法,我们可以传递一个参数,这个命令将只更新 .yml 文件中的可用库,这将确保当列出的任何库不可用时不会引发错误? 如果我的requirements.yml
文件顶部有name:
会有问题吗?【参考方案3】:
alkamid 的答案是正确的,但我发现如果环境已经处于活动状态,Conda 无法安装新的依赖项。首先停用环境可以解决此问题:
source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!
【讨论】:
如果不是当前活动的环境,conda 如何知道要更新哪个环境? @ThomasFauskanger 您可以使用-n <environment name>
明确指定它,但默认情况下它似乎适用于预期环境(可能是最近活动的,或者只是默认环境选择)
@ThomasFauskanger 如果环境的名称已被 conda 导出,则在 YAML 文件中指定。
我认为这个问题的老观点是将不同的环境更新为 yaml 文件中指定的环境。
@ThomasFauskanger yaml 文件包含环境名称以上是关于如何使用 .yml 文件更新现有的 Conda 环境的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose.yml修改之后,怎样更新现有的Container
如何使用 pip 安装来自 github 的 egg 文件,而不是在当前目录中,而是在 conda env 目录中?
使用 Shell Executor 在 GitLab Config yml 文件中为 CI-CD 激活 Conda 环境