Конда активировать на Travis CI - PullRequest
2 голосов
/ 25 марта 2019

Я использую conda 4.6.8 для тестирования пакета python в среде conda на Travis CI.Я хочу заменить мою старую строку source activate ENVNAME новой conda activate ENVNAME командой в моей конфигурации Travis CI.Если я запускаю это на Travis:

>>> conda update -n base conda
>>> conda init
no change     /home/travis/miniconda/condabin/conda
no change     /home/travis/miniconda/bin/conda
no change     /home/travis/miniconda/bin/conda-env
no change     /home/travis/miniconda/bin/activate
no change     /home/travis/miniconda/bin/deactivate
no change     /home/travis/miniconda/etc/profile.d/conda.sh
no change     /home/travis/miniconda/etc/fish/conf.d/conda.fish
no change     /home/travis/miniconda/shell/condabin/Conda.psm1
no change     /home/travis/miniconda/shell/condabin/conda-hook.ps1
no change     /home/travis/miniconda/lib/python3.7/site-packages/xonsh/conda.xsh
no change     /home/travis/miniconda/etc/profile.d/conda.csh
modified      /home/travis/.bashrc
==> For changes to take effect, close and re-open your current shell. <==

Как я могу "закрыть и заново открыть" мою оболочку на Travis?Потому что в противном случае я не могу активировать свою среду conda:

>>> conda create -n TEST package_names
>>> conda activate TEST
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
    $ conda init <SHELL_NAME>
Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell
See 'conda init --help' for more information and options.
IMPORTANT: You may need to close and restart your shell after running 'conda init'.
The command "conda activate TEST" failed and exited with 1 during .
Your build has been stopped.

1 Ответ

1 голос
/ 26 марта 2019

Не уверен, что он в настоящее время поддерживается, так как официальный документ все еще использует source в travis.yml .

Что делает conda init?

Эта новая команда должна согласовать способ настройки пользователями своих оболочек для вызова conda activate.

На самом деле, если вы запустите conda init --dry-run --verbose, вы увидите, что он пытается получить conda.sh из вашего ~/.bashrc (при условии, что вы используете Bash, исходя из информации, упомянутой в вашем вопросе).

И conda.sh определят функцию conda(), которая будет перехватывать несколько команд, среди которых activate и deactivate, и отправлять на $CONDA_EXE:

conda() {
    if [ "$#" -lt 1 ]; then
        "$CONDA_EXE"
    else
        \local cmd="$1"
        shift
        case "$cmd" in
            activate|deactivate)
                __conda_activate "$cmd" "$@"
                ;;
            install|update|upgrade|remove|uninstall)
                "$CONDA_EXE" "$cmd" "$@" && __conda_reactivate
                ;;
            *) "$CONDA_EXE" "$cmd" "$@" ;;
        esac
    fi
}

Поэтому, если эта функция не определена в вашей локальной оболочке, вы не сможете вызвать conda activate.

Намек на решение? ( не проверено на Travis CI )

Единственный совет, который я могу предложить, это попробовать source $(conda info --root)/etc/profile.d/conda.sh, а затем conda activate. Это должно сделать примерно так же, как conda init , если вы используете производные оболочки Bourne .

Для csh есть $(conda info --root)/etc/profile.d/conda.csh, а для fish есть $(conda info --root)/etc/fish/conf.d/conda.fish

Примечание: хотя это решение не было проверено на Travis CI, это решение работает для меня из bash. Конечно, исполняемый файл conda должен быть найден в PATH для conda info --root для правильной работы.

...