将点击自动完成添加到 conda env activate 脚本

Adding click autocompletion to conda env activate script

我正在使用 Python 库,它使用 click autocompletion. Since I've installed the library in a conda env, I'd like the autocomplete to be associated with it. (Also, since it isn't installed in my primary Python env, adding eval "$(_FOO_BAR_COMPLETE=source_zsh foo-bar)" to my .zshrc doesn't work.) The documentation for the library I'm using 说 "if gradient was installed in a virtual environment, the following has to be added to the activate script":

eval "$(_GRADIENT_COMPLETE=source gradient)"

我最初将此添加到 ~/miniconda3/envs/my_env/lib/python3.6/venv/scripts/common/activate,但自动完成功能不起作用。 运行

source ~/miniconda3/envs/my_env/lib/python3.6/venv/scripts/common/activate

可以工作,但是我的 shell 会在提示前添加 via __VENV_DIR__,而且当我 [=40] 时这不会自动发生=] conda activate myenv 让我觉得这是错误的做法(一方面,当我 conda deactivate my_env 时它没有被禁用)。

我正在寻找的是在 conda activate x 上将脚本添加到 运行,然后在 conda deactivate x 上结束的规范方法。 This 看起来很接近,但它是为了添加 shell 变量与 exportunset。有没有办法用 click 的自动完成功能做到这一点?

the docs 中的说明进行小幅修改后似乎对我有用 - 我将 eval 语句放在 env_vars.sh 中,而 deactivate.d 中没有任何内容。

我的理解是 export 在整个会话中持续存在于 shell 中,因此必须用相应的 unset 撤消。而 eval 仅适用于该会话,因此一旦停用 conda env,它就不再有效。

很高兴听到对 bash/conda 有更深入了解的人的更多信息!