Автоматическая активация среды conda у рыб - PullRequest
0 голосов
/ 02 мая 2019

Возможно ли это? С virtualenv я использовал виртуальную рыбу, но, похоже, нет эквивалента conda. Для bash я нашел https://github.com/chdoig/conda-auto-env, который также ссылается на https://github.com/sotte/conda_auto_activate.

В качестве альтернативы плагин fish, который автоматически запускается, когда в определенном каталоге, будет работать примерно так же.

1 Ответ

1 голос
/ 02 мая 2019

Это должно быть возможно. Вдохновлен этой строкой в ​​рыбной документации (акцент мой):

Функции автозагрузки

Когда fish встречает команду, она пытается автоматически загрузить функцию для этой команды, ища файл с именем этой команды в ~ / .config / fish / functions /.


Таким образом, у нас может быть функция, которая проверяет папку в каждой команде 'cd' и запускает скрипт для активации там, где это необходимо. Проще это сделать, если у вас есть только один VE.

Возможно, решение состоит в том, чтобы проверить определенный файл сценария, который переключает VE в новом каталоге, и выполнить его, если он существует. (Это должно позаботиться о том, как обращаться со случаем, когда вы переключаетесь непосредственно в подкаталог.)


Обновлено после встречного вопроса из ОП: Вот что я имел в виду. Скажем, мы копируем эту функцию в файл ~ / .config / fish / functions / cd.fish:

# search for a myInit.fish file UP THE DIRECTORY TREE, starting from the current folder.
# if found, execute it.
# Intended for automatically switching to the python  virtual environment on entering the
# directories.  Can put in other initialization stuff.

function cd --description 'change directory - fish overload'

    builtin cd $param $argv

    set -l check_dir (pwd)
    # if myInit.fish is found in the home directory:
    if test -f "$check_dir/myInit.fish"
        source $check_dir/myInit.fish
        echo "executed: source $check_dir/myInit.fish"
        return
    end

    # Look up the directory tree for myInit.fish:
    set check_dir (string split -r -m 1 / $check_dir)[1]

    while test $check_dir
        if test -f "$check_dir/myInit.fish"
            source $check_dir/myInit.fish
            echo "executed: source $check_dir/myInit.fish"
            break;
        else
            set check_dir (string split -r -m 1 / $check_dir)[1]
        end  # if ... else ...
    end  # while 
end  # function

Скажем, вы хотите переключиться на виртуальную среду с именем "VEOpenCV", когда вы переключаетесь либо в каталог OpenCV, либо в один из его подкаталогов. Для этого создайте файл в каталоге OpenCV, назовите его myInit.fish и вставьте в него следующую строку:

activate VEOpenCV

Чтобы деактивировать VE при переключении на домашний каталог, создайте еще один файл myInit.fish в домашнем каталоге и вставьте туда команду «деактивировать». Если нет, просто создайте пустой файл myInit.fish в домашнем каталоге, чтобы прекратить обход каталога.

Если вы предпочитаете не перегружать 'встроенный компакт-диск', измените имя функции выше на 'myCd' или что-либо еще и переименуйте файл, чтобы соответствовать этому. Затем позвоните

%> myCd OpenCV

вместо

%> cd OpenCV

Я не тщательно его протестировал; но ограниченное тестирование прошло успешно. Если это не работает, разместите заметку здесь.

И не забудьте опубликовать отладки / улучшения / ошибки и другую соответствующую информацию - или лучшее решение, которое вы можете найти здесь!

...