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

235

Я недавно установил 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я прошу Конду не активировать базу, когда я открываю терминальную сессию.

DryLabRebel
источник
Вы пытались использовать source activateвместо этого? ака "Oldschool метод"
Jena

Ответы:

483

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

conda config --set auto_activate_base false

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

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

jieong
источник
1
Отлично. Где вы узнали об обстановке? Потому что я не помню, чтобы когда-нибудь читал его во вводных уроках?
DryLabRebel
6
@DryLabRebel Это не упоминается ни в каких заметках о выпуске, но вы можете найти его в опциях конфигурации, запустив его conda config --describe. Поиск в базе кода «auto_activate_base», кажется, показывает, что Conda v4.6.0 является введением.
Merv
2
Упс, пропустил ваш вопрос. Сожалею! @merv прав в том, что это в конфиге. Я искал разные варианты для другой проблемы и увидел этот вариант.
Джионг
5
@DryLabRebel После того, как установщик инициализировал Anaconda, он распечатывает: Если вы предпочитаете, чтобы базовая среда conda не активировалась при запуске, установите для параметра auto_activate_base значение false: conda config --set auto_activate_base falseСпасибо за установку Anaconda3!
Чжи Юань
5
Большое спасибо за этот ответ. ИМО это должно быть поведение по умолчанию. Для тех, у кого Linux, которые могут задаваться вопросом, должны ли они следовать связанному вопросу о Linux, просто следуйте этому, он, кажется, работает независимо от ОС (Linux Mint здесь)
Kamel
22

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

conda deactivate

прямо под

# <<< conda initialize <<<
darthbith
источник
5
Это должно работать и должно обобщать. Но я бы предпочел решение, которое удаляет мой профиль bash, а не добавляет к нему.
DryLabRebel
Сможете ли вы declutter зависит от того, какая у вас версия conda. Если я правильно понимаю, когда у вас есть conda 4.6, вам нужна только __conda_setupфункция, чтобы вы могли получить все до 6 строк. Но я не думаю, что здесь есть много чего ...
Дартбит
2
Но если вы вручную отредактируете этот раздел, conda больше не сможет автоматически им управлять. Я бы предложил просто оставить его в покое.
Дартбит
2
Это не работает, открывая новую оболочку с добавленным кодом conda в .zshrc, и я каждый раз сталкиваюсь с (базовой) средой.
Мерлин
1
Точно так же, как сказал Мерлин, запуск нового терминала приводит к тому, что у него снова (база)
jreft56
18

В итоге я обнаружил, что если я закомментировал блок инициализации 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 доступна для активации среды, если я хочу, но не активируется по умолчанию.

DryLabRebel
источник
5
К сожалению, если содержимое блока управляется другими сценариями, как указано в начале блока кода, это изменение может быть заменено или отменено другими сценариями.
Куканани,
@DryLabRebel - вы когда-нибудь находили надежный подход, который убрал беспорядок из rcфайла? Мне тоже было бы интересно, если бы я мог относиться к conda как к другим envs, а не к
беспорядку
@baxx нет у меня нет. Если вам нужна последняя версия conda, и вы хотите, чтобы она работала, тогда вам действительно нужны команды инициализации.
DryLabRebel
ок, ура, я чувствую, что может быть выход, если вы просто установите conda env в директории проекта, а не в централизованном месте. Пока не уверен
baxx
Кажется, у этого есть только недостатки по сравнению с использованием conda config --set auto_activate_base false, вы можете уточнить?
AMC
16

Есть 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_ . Например, always_yesпараметр конфигурации conda может быть указан с помощью CONDA_ALWAYS_YESпеременной среды.

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

Ссылки

Simba
источник
отличный ответ. я использую метод env var в скриптах, чтобы контролировать это поведение так:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Кевин Олри
Я должен был добавить export CONDA_AUTO_ACTIVATE_BASE=falseк моему .zshrc для варианта 3 для работы.
Норманн
9

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

conda config --set auto_activate_base false

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

conda activate
kudibaba
источник
3
Эй, этот ответ правильный, но практически идентичен принятому ответу. Мой вопрос не касается активации кондо, это одна из первых вещей, которую вы изучаете, изучая руководства. Подумайте о добавлении некоторой полезной, актуальной информации, еще не предоставленной в предыдущих ответах.
DryLabRebel
2
Я искал как вручную активировать после отключения авто. Спасибо!
Eigil
Это помогло. Я также искал, как вручную активировать conda после отключения авто-активации.
Крис Ньюгуна
1

Одна вещь, на которую не было обращено внимания, заключается в том, что нет разницы между отсутствием активной среды и активацией базовой среды, если вы просто хотите запускать приложения из каталога скриптов 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
Торстен
источник
0

Если вы хотите, чтобы ваш 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
coldfix
источник
Если вы хотите, чтобы ваш bashrc был простым, вы можете удалить весь беспорядок, сгенерированный conda init, и оставить только одну строку «Беспорядок», который говорит !! Содержимое этого блока управляется 'conda init' !! ? В чем преимущество этого, вместо простого изменения соответствующей настройки / конфигурации Conda?
AMC
-2

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

step1: 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 "$@"

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

CcMango
источник