Использование среды anaconda с cygwin на окнах

Попытка настроить среды с помощью anaconda через интерфейс cygwin в Windows NT и сбой.

Создание сред (conda create -n test_env) отлично работает. Но activate test_env не удается.

Я попытался взломать его:

export PATH=/cygdrive/c/users/nick/anaconda3/envs/test:$PATH

Это фиксирует некоторое поведение (which python указывает на правый питон). Но если я затем сделаю команду "conda install", она будет установлена в корневой каталог anaconda, а не в среду. Возможно, экспорт является локальным для сеанса bash, а conda называет другую версию PATH? Есть ли способ сделать модификацию PATH глобальной?

Ответ 1

После долгой борьбы с проблемой, я думаю, что я достиг разумного и работоспособного метода интеграции Anaconda python (и связанных с ним сред) в Cygwin. Предполагая, что Cygwin и Anaconda работают независимо друг от друга, чтобы получить доступ ко всем инструментам Anaconda от Cygwin, следующая настройка в .bash_profile похоже, делает трюк. (Я включил только те части .bash_profile относятся к интеграции... надеюсь, что я не пропустил что-то непреднамеренно.)

Эта настройка существенно делает три вещи. Во-первых, пользователю необходимо явно установить каталог $CONDA_BASE_DIR как место, где была установлена базовая среда для conda/anaconda/miniconda. Во-вторых, существует функция в .bash_profile для отслеживания текущей среды $CONDA_DEFAULT_ENV с использованием переменной оболочки $CONDA_DEFAULT_ENV. И, наконец, мы определяем псевдоним cyg-conda и функцию cyg-activate для использования в качестве команд замены для стандартной команды conda и activate. Обратите внимание, что имя переменной $CONDA_DEFAULT_ENV является специальным и используется внутри самой командой conda.

Используя эту настройку, я могу использовать cyg-conda и cyg-activate же, как я обычно использовал conda и activate в командной строке Anaconda, делая среду доступной для моей оболочки Cygwin bash.

Разумеется, он открыт для предложений по улучшению и т.д.

###############################################################################

#  Anaconda Environment Selection - Plese set CONDA_BASE_DIR to the directory
#  containing the base installation of anaconda/miniconda.

export CONDA_BASE_DIR=/cygdrive/c/Users/Patrick/Miniconda3

#  Proxy Servers & Network Setup (if needed)

export HTTP_PROXY=
export HTTPS_PROXY=

#  IMPORTANT - Ignore carriage returns when using a Cygwin environment.

export SHELLOPTS
set -o igncr

###############################################################################

#  Manage conda environments for Python.  We check the environment variable
#  $CONDA_DEFAULT_ENV to see which environment is desired.  The default (root)
#  environment will be chosen if nothing is specified.  Note that this variable
#  will be explicitly managed by the cyg-activate ( ) function we have defined
#  below, specifically for the purpose of changing environments.  The root
#  environment is also handled slightly different from the others when it comes
#  to setting the CONDA_DEFAULT_ENV variable.

if [ ${CONDA_DEFAULT_ENV} ] && [ ${CONDA_DEFAULT_ENV} != 'root' ] 
then
    #  SELECT ONE OF THE NON-DEFAULT ENVIRONMENTS
    export CONDA_PREFIX=${CONDA_BASE_DIR}/envs/${CONDA_DEFAULT_ENV}
else
    #  SELECT THE DEFAULT ENVIRONMENT (and set CONDA_DEFAULT_ENV full path)
    export CONDA_DEFAULT_ENV=root
    export CONDA_PREFIX=${CONDA_BASE_DIR}
fi

###############################################################################

#  Define cyg-conda and cyg-activate to facilitate management of conda.

alias cyg-conda=${CONDA_BASE_DIR}/Scripts/conda.exe

cyg-activate() {
    export CONDA_DEFAULT_ENV=$1
    source ~/.bash_profile
    cyg-conda info --envs
}

###############################################################################

#  PATH - ALl of the anaconda/miniconda path entries appear first.

PATH=
PATH=$PATH:$CONDA_PREFIX
PATH=$PATH:$CONDA_PREFIX/Library/mingw-w64/bin
PATH=$PATH:$CONDA_PREFIX/Library/usr/bin
PATH=$PATH:$CONDA_PREFIX/Library/bin
PATH=$PATH:$CONDA_PREFIX/Scripts
PATH=$PATH:$HOME/scripts
PATH=$PATH:$HOME/local/bin
PATH=$PATH:/usr/local/bin
PATH=$PATH:/usr/bin

export PATH

###############################################################################

Ответ 2

Начиная с conda 4.4 активировать & Команды деактивации поддерживаются в cygwin со следующим синтаксисом (связанная документация также содержит рекомендации по добавлению conda в PATH, что стоит проверить):

conda activate <name-of-environment-to-activate>
conda deactivate

Тем не менее, есть ошибка, которая не позволяет им работать из коробки, а именно то, что все сценарии bash, которые использует cygwin, имеют окончания строк в Windows (CRLF). Чтобы решить эту проблему, есть несколько вариантов:

  1. добавьте следующее в свои .bash_profile или .bashrc (как это делается в сценарии в ответе @patrickkelly):

    if [[ "${OSTYPE}" == 'cygwin' ]]; then
        set -o igncr
        export SHELLOPTS
    fi
    
  2. Измените окончания строк соответствующих файлов на стиль Unix (LF) с помощью инструмента, подобного dos2unix. Приведенные ниже файлы, расположенные в каталоге, в который был установлен conda, должны быть конвертированы, и могут быть другие:

    • etc/profile.d/conda.sh
    • Scripts/activate
    • Scripts/deactivate


    update: когда conda обновляет себя, вышеуказанные файлы перезаписываются, по крайней мере, некоторое время, восстанавливая окончания строк CRLF, поэтому процесс преобразования их в LF придется повторить при таких обстоятельствах.

Ответ 3

Поскольку Cygwin эмулирует среду linux, нам нужно использовать "source activate test_env" вместо "activate test_env".