oku*_*oub 4 git environment version-control github conda
我的项目有一个git repo。我conda
经常更改环境,因此我希望我的仓库可以跟踪环境的变化,并能够推送最新的更新并将其拉入另一台计算机。可能吗?我搜索并找到了几种解决方案(例如https://tdhopper.com/blog/my-python-environment-workflow-with-conda/),但是没有一个提供自动的变更跟踪。
意思是,我想将我在环境中所做的任何更改都包含在项目的存储库中。就像添加新软件包等。这样,当我在另一台计算机上git pull它时,新软件包也将被提取并添加到环境中。
在 Conda 中,您可以从文件创建虚拟环境并将环境导出到文件,该文件可以包含在您的 git 存储库中。如果您在另一台机器上拉下您的存储库或删除您的环境,您可以运行:
conda env create -f=env.yml
Run Code Online (Sandbox Code Playgroud)
当您对环境进行更改时,请在添加/提交之前运行导出:
conda env export > env.yml
Run Code Online (Sandbox Code Playgroud)
我使用git hooks使conda环境自动更新。您可以在此处获得有关git hooks的更多信息。
这里的想法是有两个git钩子:
如文档中所述,当启动git存储库时,将创建一个文件夹.git / hooks并用示例脚本填充。要使用其中之一,您只需编辑文件,将其重命名以删除其扩展名(.sample),并确保其可执行。
注意:我使用zsh作为shell,但是bash中的脚本应该是相同的(如果没有,请注释),您只需要更改shebang行即可。
<ENV_NAME>
#!/usr/bin/env zsh
echo "\n==================== pre-push hook ===================="
# Export conda environment to yaml file
conda env export -n <ENV_NAME> env.yml
# Check if new environment file is different from original
git diff --exit-code --quiet env.yml
# If new environment file is different, commit it
if [[ $? -eq 0 ]]; then
echo "Conda environment not changed. No additional commit."
else
echo "Conda environment changed. Commiting new env.yml"
git add env.yml
git commit -m "Updating conda environment"
echo 'You need to push again to push additional "Updating conda environment" commit.'
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
chmod u+x pre-push
)#!/usr/bin/env zsh
echo "\n==================== post-merge hook ===================="
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
check_run() {
echo "$changed_files" | grep --quiet "$1" && eval "$2"
}
echo "Have to update the conda environment"
check_run env.yml "conda env update --file env.yml"
Run Code Online (Sandbox Code Playgroud)
chmod u+x post-merge
)rebase
。prefix
节提供了本地计算机上环境文件夹的路径。经过一些测试,一切似乎都运行良好,但是我不知道在各种机器上进行开发时是否可能以某种方式造成冲突。因此,非常欢迎评论,更正和改进意见!
归档时间: |
|
查看次数: |
955 次 |
最近记录: |