Як я можу запобігти Conda активувати базове середовище за умовчанням?


234

Нещодавно я встановив anaconda2 на своєму Mac. За замовчуванням Conda налаштована для активації базового середовища, коли я відкриваю новий сеанс терміналу.

Я хочу отримати доступ до команд Conda (тобто я хочу, щоб шлях до Conda був доданий до мого $ PATH, який Conda робить при ініціалізації, тому це добре).

Але я зазвичай не програмую на python, і я не хочу, щоб Conda активувала середовище за замовчуванням.

Під час першого виконання conda initпідказки Conda додає моє .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прошу, щоб Conda не активував базу, коли я відкриваю сеанс терміналу.


Ви намагалися використовувати source activateзамість цього? aka "метод oldschool"
jena

Відповіді:


481

У мене conda 4.6 з аналогічним блоком коду, який додав conda. У моєму випадку є конфігурація конди для відключення автоматичної базової активації:

conda config --set auto_activate_base false

Перший раз, коли ви запустите його, він створить ./condarcу вашому домашньому каталозі цей параметр, щоб замінити типовий параметр.

Це не скаже ваше, .bash_profileале це більш чисте рішення без ручного редагування розділу, яким керує conda.


1
Чудово. Де ви дізналися про налаштування? Тому що я не пам’ятаю, щоб її читали десь у вступних навчальних посібниках?
DryLabRebel

6
@DryLabRebel Це не згадується в жодних примітках до випуску, але ви можете знайти їх, описані в параметрах конфігурації, запустивши conda config --describe. Пошук у кодовій базі для "auto_activate_base" показує, що Conda v4.6.0 - це вступ.
merv

2
На жаль, пропустили ваше запитання. Вибачте! @merv правильний тим, що він знаходиться в config. Я розглядав різні варіанти для іншого питання і бачив цей варіант.
jieong

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 <<<

5
Це має працювати і повинно узагальнювати. Але я вважаю за краще рішення, яке перешкоджає моєму баш-профілю, а не додає його.
DryLabRebel

Чи зможете ви знежирити, залежить від вашої версії conda. Якщо я правильно розумію, щойно у вас буде конда 4.6, вам потрібна лише __conda_setupфункція, щоб ви могли звести всю справу до 6 рядків. Але я не думаю, що тут багато чого для
занепаду

2
Але якщо ви вручну редагуєте цей розділ, конда більше не може автоматично керувати ним. Я б запропонував просто залишити це в спокої.
darthbith

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 доступний для активації середовища, якщо я хочу, але не активується за замовчуванням.


5
На жаль, якщо вмістом блоку керуються інші сценарії, як зазначено на початку блоку коду, ця зміна може бути замінена або скасована іншими сценаріями.
Kukanani

@DryLabRebel - ви коли-небудь знаходили надійний підхід, який видалив безлад з rcфайлу? Мене це також зацікавить, будучи здатним просто лікувати конду, як і інші оточення, а не
забивати

@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у файлі init оболонки. ( .bashrcдля bash, .zshrcдля zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

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

    Налаштування середовища мають перевагу над відповідними параметрами у .condarcфайлі.

Список літератури


чудова відповідь. Я використовую метод 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

3
Гей, ця відповідь правильна, але практично ідентична прийнятій відповіді. Моє питання не стосується активації кондо, це одне з перших речей, які ви дізнаєтесь, проходячи підручники. Подумайте про додавання корисної, відповідної інформації, ще не наданої в попередніх відповідях.
DryLabRebel

2
Я шукав, як вручну активувати після відключення авто. Дякую!
eigil

Це допомогло. Я також шукав, як вручну активувати конду після відключення автоматичної активації.
Кріс Ньюгуна

1

Одне, на що не було вказано, - це те, що між відсутністю активного середовища та активацією базового середовища майже немає різниці, якщо ви просто хочете запускати програми з каталогу скриптів Conda (Python's) (як @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 доступною без активації базового середовища.

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

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

Якщо ви хочете, щоб ваш bashrc був простим, ви можете видалити всі генерації конда-ініту, а також зберегти лише один рядок "Захват", який говорить !! Зміст у цьому блоці керується '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 "$@"

step2: прокоментуйте останній рядок: # conda activate "$@"


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.