这被问到here但从未回答。
如何使用另一个.yml文件更新预先存在的conda环境。在处理具有多个需求文件的项目时,这非常有用,例如#!/bin/sh
# capture the seconds since epoch minus 2 days
NOW=`expr $(date '+%s') - 172800`
grep "After :" myFile.txt | cut -d ':' -f 2,4 | while read -r line;
do
# parse the string s into a date and capture the number of seconds since epoch
date=$(date -d "$line" '+%s')
# compare and print output
if [ $date -lt $NOW ]; then
echo "Date Less then 2 days, s=$line, date=$date, now=$NOW"
else
echo "Date Greater then 2 days, s=$line, date=$date, now=$NOW"
fi
done
等。
例如,下面是base.yml, local.yml, production.yml
文件包含conda-forge,conda和pip包:
base.yml
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.
。
这不起作用。有什么想法吗?
答案 0 :(得分:76)
尝试使用conda env update:
source activate myenv
conda env update --file local.yml
答案 1 :(得分:15)
alkamid的回答是正确的,但我发现如果环境已经处于活动状态,Conda将无法安装新的依赖项。首先停用环境会解决这个问题:
source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!
答案 2 :(得分:5)
建议的答案部分正确。您需要添加-prune 选项,以卸载从environment.yml中删除的软件包。 正确的命令:
conda env update -f local.yml --prune