Добавление автозаполнения клика в сценарий активации conda env - PullRequest
0 голосов
/ 24 марта 2020

Я использую библиотеку Python, которая использует автозаполнение click . Поскольку я установил библиотеку в conda env, я бы хотел, чтобы автозаполнение было связано с ней. (Кроме того, поскольку он не установлен в моем основном Python env, добавление eval "$(_FOO_BAR_COMPLETE=source_zsh foo-bar)" к моему .zshrc не работает.) Документация для библиотеки , которую я использую , говорит "если Градиент был установлен в виртуальной среде, к сценарию 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

работает , но моя оболочка добавляет via __VENV_DIR__ к приглашению, и тот факт, что это не происходит автоматически при запуске conda activate myenv, заставляет меня думать об этом это неправильный способ сделать это (например, он не отключается, когда я conda deactivate my_env).

Мне нужен канонический способ добавления сценария для запуска conda activate x , а затем заканчивается conda deactivate x. Этот кажется очень близким, но он предназначен для добавления переменных оболочки с export и unset. Есть ли способ сделать это с автозаполнением click?

1 Ответ

1 голос
/ 24 марта 2020

После небольшой модификации инструкций в документы мне показались полезными - я поместил оператор eval в env_vars.sh, а ничего в deactivate.d.

Насколько я понимаю, export сохраняется в оболочке на протяжении всех сеансов, и поэтому должен быть отменен с соответствующим unset. Принимая во внимание, что eval работает только для этого сеанса, поэтому, как только conda env деактивируется, он больше не действует.

Был бы рад услышать больше от кого-то с более глубоким пониманием bash / conda под капотом!

...