将单击自动完成添加到 conda env 激活脚本



我正在使用一个使用点击自动完成的Python库。由于我已经在 conda env 中安装了库,我希望自动完成与它相关联。(另外,由于它没有安装在我的主要 Python 环境中,因此向我的.zshrc添加eval "$(_FOO_BAR_COMPLETE=source_zsh foo-bar)"不起作用。我正在使用的库的文档说"如果梯度安装在虚拟环境中,则必须将以下内容添加到activate脚本中":

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__提示符,而且当我运行conda activate myenv时这不会自动发生这一事实让我认为这是错误的方法(一方面,当我这样做时它没有被禁用conda deactivate my_env)。

我正在寻找的是添加脚本以在conda activate x上运行的规范方法,然后在conda deactivate x上结束。这似乎非常接近,但它用于添加带有exportunset的 shell 变量。有没有办法用click的自动完成来做到这一点?

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

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

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

最新更新