Как запретить Conda активировать базовую среду по умолчанию?

Я недавно установил anaconda2 на моем Mac. По умолчанию Conda настроена на активацию базовой среды, когда я открываю новый сеанс терминала.

Я хочу получить доступ к командам Conda (т.е. я хочу, чтобы путь к Conda был добавлен к моему $PATH, что делает Conda при инициализации, так что это нормально).

Но я обычно не программирую на python и не хочу, чтобы Conda активировала среду по умолчанию.

При первом выполнении conda init из приглашения Конда добавляет следующее к моему .bash_profile:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else
    export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
unset __conda_setup
# <<< conda initialize <<<

Если я закомментирую весь блок, я не смогу активировать какие-либо среды Conda.

Я пытался закомментировать весь блок, кроме

export PATH="/Users/geoff/anaconda2/bin:$PATH"

Но затем, когда я начал новый сеанс и попытался активировать среду, я получил это сообщение об ошибке:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

Этот вопрос (и другие подобные) полезны, но в конечном итоге он не отвечает на мой вопрос и больше подходит для пользователей Linux.

Для уточнения я не прошу убрать (base) от моего $PS1 Я прошу Конду не активировать базу, когда я открываю терминальную сессию.

10 ответов

Решение

У меня есть conda 4.6 с похожим блоком кода, который был добавлен conda. В моем случае есть параметр конфигурации conda для отключения автоматической активации базы:

conda config --set auto_activate_base false

При первом запуске он создаст ./condarc в вашем домашнем каталоге с этим параметром, чтобы переопределить значение по умолчанию.

Это не разрушит ваш .bash_profile но это более чистое решение без ручного редактирования того раздела, которым управляет conda.

Есть 3 способа добиться этого после conda4.6. (Последний метод имеет наивысший приоритет.)

  1. Использовать подкоманду conda config чтобы изменить настройку.

    conda config --set auto_activate_base false
    
  2. Фактически, бывший conda config подкоманда изменяет файл конфигурации .condarc. Мы можем изменить.condarcпрямо. Добавить следующий контент в.condarc в вашем домашнем каталоге,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
    
  3. Установить переменную среды CONDA_AUTO_ACTIVATE_BASEв файле инициализации оболочки. (.bashrc для bash, .zshrc для zsh)

    CONDA_AUTO_ACTIVATE_BASE=false
    

    Чтобы преобразовать из condarcимя параметра конфигурации на основе файла к имени параметра переменной среды, сделайте имя полностью прописным и добавьте CONDA_. Например, conda'salways_yes параметр конфигурации можно указать с помощью CONDA_ALWAYS_YES переменная окружения.

    Параметры среды имеют приоритет над соответствующими параметрами в.condarc файл.

Ссылки

Ответ немного зависит от версии conda что вы установили. Для версий conda >= 4.4 этого должно быть достаточно deactivate среда conda после инициализации, поэтому добавьте

conda deactivate

прямо под

# <<< conda initialize <<<

Чтобы отключить автоматическую активацию базовой среды conda в терминале:

conda config --set auto_activate_base false

Чтобы активировать базовую среду conda:

conda activate

В итоге я обнаружил, что если я закомментировал блок инициализации Conda следующим образом:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
# __conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
    # eval "$__conda_setup"
# else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else
    export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
# unset __conda_setup
# <<< conda initialize <<<

Работает именно так, как я хочу. То есть Conda доступна для активации среды, если я хочу, но не активируется по умолчанию.

Одна вещь, на которую не указывалось, заключается в том, что нет почти никакой разницы между отсутствием активной среды и активацией базовой среды, если вы просто хотите запускать приложения из каталога сценариев Conda (Python) (как хочет @DryLabRebel).

Вы можете установить и удалить через conda, и conda показывает базовую среду как активную, что по сути таково:

> echo $Env:CONDA_DEFAULT_ENV
> conda env list
# conda environments:
#
base                  *  F:\scoop\apps\miniconda3\current

> conda activate
> echo $Env:CONDA_DEFAULT_ENV
base
> conda env list
# conda environments:
#
base                  *  F:\scoop\apps\miniconda3\current

за conda 4.12.0(под WOS) сработало следующее (где все предыдущие ответы , включая эти , не помогли):
в вашем activate.batфайл (мой был в ~/miniconda3/Scripts/activate.bat ), измените строку:

      @REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" activate %*

в

      @REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" deactivate

это изменение/модификация строки не работает в разделе (файла активации.bat):

      @if "%_args1_first%"=="+" if NOT "%_args1_last%"=="+" (
        @CALL "%~dp0..\condabin\conda.bat" activate
        @GOTO :End
)

может быть, потому что это зависит от того, как вы miniconda3(Anaconda Prompt) настроен исполняемый файл: %windir%\System32\cmd.exe "/K" some-path-to\miniconda3\Scripts\activate.bat some-path-to\miniconda3(в моем случае).

предостережение : обновление condaперезаписывает этот (activate.bat) файл; поэтому нужно изменять указанную выше строку столько раз, сколько необходимо/обновляется. не так много нарушителя сделки, если вы спросите меня.

Если вы хотите, чтобы ваш bashrc оставался простым, вы можете удалить все conda init создаваемый беспорядок, и оставьте только одну строку:

. "/Users/geoff/anaconda2/etc/profile.d/conda.sh"

См. Рекомендуемое изменение, чтобы включить conda в вашей оболочке.

Это сделает команду conda доступной без активации базовой среды.

Если вы хотите использовать свой bashrc в других системах, где conda не установлена ​​по тому же пути, вы можете оставить if/fi строк, чтобы избежать сообщений об ошибках, например:

if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
fi

Я столкнулся с той же проблемой. Первоначально я удалил.bash_profile, но это неправильный путь. После установки anaconda четко показывает инструкции для решения этой проблемы. Проверьте изображение на предмет решения, предоставленного Anaconda

Это может быть ошибка недавней анаконды. Что мне подходит:

шаг 1: vim /anaconda/bin/activate, это показывает:

 #!/bin/sh                                                                                
 _CONDA_ROOT="/anaconda"
 # Copyright (C) 2012 Anaconda, Inc
 # SPDX-License-Identifier: BSD-3-Clause
 \. "$_CONDA_ROOT/etc/profile.d/conda.sh" || return $?
 conda activate "$@"

step2: закомментируйте последнюю строку: # conda activate "$@"

Другие вопросы по тегам