Python conda中requirements.yml的自动更新

Python conda中requirements.yml的自动更新,python,git,yaml,conda,Python,Git,Yaml,Conda,我们正在使用conda来管理Python项目的环境。让我们感到困扰的一件事是团队中的某个人偶尔会在环境中安装一个新包,但却忘了更新requirements.yml文件 而不是在每次提交前键入: conda env export > requirements.yml 当有人安装或删除软件包时,是否可以自动更新该文件?Git-Hooks 我不知道conda(安装/升级/删除)有什么钩子。但是,可以为pre-commit添加一个Git钩子,用于检查environment.yaml文件是否与co

我们正在使用
conda
来管理Python项目的环境。让我们感到困扰的一件事是团队中的某个人偶尔会在环境中安装一个新包,但却忘了更新
requirements.yml
文件

而不是在每次提交前键入:

conda env export > requirements.yml
当有人安装或删除软件包时,是否可以自动更新该文件?

Git-Hooks 我不知道conda(安装/升级/删除)有什么钩子。但是,可以为
pre-commit
添加一个Git钩子,用于检查
environment.yaml
文件是否与
conda-env-export
的输出匹配。差不多

.git/hooks/pre-commit

这可能是最残酷的方式(即,盲目地写文件并将其放入提交中)。更温和的选择是向用户抛出警告,然后按原样进行提交。然后,他们可以选择是否需要使用他们的env YAML修改提交

这个脚本主要是概念的证明。您可能需要解决的问题是,除非您的团队有一个env实例,否则YAML中的
前缀:…
行将是不同的<代码>频道:…如果用户有不同的
。condarc
设置,也可能略有不同。我想您可以从
$CONDA_YAML
中过滤出这样的差异,以便跨用户进行规范化。否则,它将在每次不同用户提交时提交一个新版本


不幸的是,您需要说服您的团队以某种方式将这样一个脚本放在他们本地的
.git/hooks/
文件夹中。讨论间接提交的一些技巧。

这确实很残酷,但这是唯一的解决方案。Python中的环境管理非常好painful@Mike嗯,显然我重新发明了轮子:可能值得看看他们的轮子,因为看起来他们还试图自动更新env后期合并。谢谢。我已经把它变成了一个预先提交的钩子。欢迎反馈!
#!/bin/bash

CONDA_ENV='my_env'
ENV_FILE='environment.yaml'

echo "Checking Conda environment '$CONDA_ENV' for changes..."

CONDA_YAML=$(conda env export -n $CONDA_ENV)
DIFF=$(echo "$CONDA_YAML" | git diff --no-index -- "$ENV_FILE" -)

if [ "$DIFF" != "" ]
then
    echo "Changes were found in the Conda environment!"
    echo "$DIFF"

    echo "Updating $ENV_FILE."
    echo "$CONDA_YAML" > "$ENV_FILE"

    echo "Adding updated $ENV_FILE to commit."
    git add "$ENV_FILE"
else
echo "No changes detected. Proceeding with commit."
fi

exit 0