如何使用另一个 .yml 文件更新预先存在的 conda 环境。这在处理具有多个需求文件(即 base.yml, local.yml, production.yml
等)的项目时非常有用。
例如,下面是一个包含 conda-forge、conda 和 pip 包的 base.yml
文件:
基础.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
。
这不起作用。有什么想法吗?
conda env create -f ~/CoqGym/coq_gym.yml
(请参阅:stackoverflow.com/questions/54492671/…)
尝试使用 conda env update:
conda activate myenv
conda env update --file local.yml --prune
--prune
卸载从 local.yml
中删除的依赖项,正如 @Blink 在 this answer 中指出的那样。
或者不需要激活环境(感谢@NumesSanguis):
conda env update --name myenv --file local.yml --prune
请参阅 Conda 用户指南中的 Updating an environment。
建议的答案是部分正确的。您需要添加 --prune 选项来卸载从 environment.yml 中删除的包。正确的命令:
conda env update -f local.yml --prune
requirements.yml
文件顶部有一个 name:
会有问题吗?
alkamid 的答案是正确的,但我发现如果环境已经处于活动状态,Conda 无法安装新的依赖项。首先停用环境可以解决此问题:
source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!
-n <environment name>
明确指定它,但默认情况下它似乎适用于预期的环境(可能是最近活动的,或者只是默认环境选择)
不定期副业成功案例分享
-f
和file.yml
之间不需要等号。删除等号将使制表符完成在.yml
文件名上工作。--name env_name
以忽略local.yml
中的任何name: foo
标记。还可以防止需要先激活 myenv。完整命令:conda env update --name env_name --file local.yml
来自:stackoverflow.com/a/45525593/3399066 的评论name
参数,否则它会使用此 update 命令创建