更改目录时自动激活 conda env

sun*_*ess 8 python environment anaconda conda

我在不同的项目中使用了一些 conda 环境,例如:

  • ml37(用于机器学习)
  • etl37(用于数据管道)

我在自己的目录中组织了本地项目:

  • 应用程序/some_app
  • 应用程序/other_app
  • ...

每次我cd到一个特定的项目时,我已经知道我想使用哪个环境。conda activate [some env]所以我每次更改目录时都会这样做。我觉得一定有更好的方法。

自动化这个过程的干净方法是什么?

或者我使用 conda 环境是错误的?

val*_*ops 7

我制作了一个类似于 Corey Chafer 的脚本,但这个脚本扩展了 cd 命令。

cd() { builtin cd "$@" && 
if [ -f $PWD/.conda_config ]; then
    export CONDACONFIGDIR=$PWD
    conda activate $(cat .conda_config)
elif [ "$CONDACONFIGDIR" ]; then
    if [[ $PWD != *"$CONDACONFIGDIR"* ]]; then
        export CONDACONFIGDIR=""
        conda deactivate
    fi
fi }
Run Code Online (Sandbox Code Playgroud)

将这几行代码放在 shell 配置文件的底部,然后在要为其激活环境的目录中创建一个 .conda_config 文件。.conda_config 文件必须仅包含环境名称。

这样,每次您 cd 进入具有 .conda_config 文件的目录时,脚本都会激活 env,而每次 cd 退出时,它都会停用。

我创建了一个存储库以供参考Conda-autoactivate-env

编辑:
情况中有一个错误elif
基本上[-n $CONDACONFIGDIR]总是返回True,它的逻辑实际上是倒退的。

解决方法是:
引用变量(或使用双方括号)并删除 -n
[ "$CONDACONFIGDIR" ]OR [[ $CONDACONFIGDIR ]]

上面的代码已经是最新的了!