我正在使用一个使用点击自动完成的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
上结束。这似乎非常接近,但它用于添加带有export
和unset
的 shell 变量。有没有办法用click
的自动完成来做到这一点?
对文档中的说明进行小幅修改似乎对我有用 - 我将eval
语句放在env_vars.sh
中,而deactivate.d
中没有任何内容。
我的理解是,export
在整个会话中都持久存在于 shell 中,因此必须使用相应的unset
撤消。而eval
仅适用于该会话,因此一旦停用 conda env,它就不再有效。
很高兴听到对引擎盖下bash
/conda
有更深入了解的人的更多信息!