Jak mogę domyślnie uniemożliwić Conda aktywację środowiska podstawowego?


234

Niedawno zainstalowałem anaconda2 na moim komputerze Mac. Domyślnie Conda jest skonfigurowana do aktywacji środowiska podstawowego po otwarciu nowej sesji terminala.

Chcę dostępu do poleceń Conda (tzn. Chcę dodać ścieżkę Conda do mojej $ PATH, którą robi Conda po zainicjowaniu, więc nie ma problemu).

Ale zwykle nie programuję w Pythonie i nie chcę, aby Conda domyślnie aktywowała środowisko.

Podczas pierwszego uruchamiania conda initz wiersza Conda dodaje do mojego .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 <<<

Jeśli skomentuję cały blok, nie mogę aktywować żadnego środowiska Conda.

Próbowałem skomentować cały blok oprócz

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

Ale kiedy zacząłem nową sesję i próbowałem aktywować środowisko, dostałem ten komunikat o błędzie:

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

To pytanie (i inne podobne) jest pomocne, ale ostatecznie nie odpowiada na moje pytanie i jest bardziej odpowiednie dla użytkowników Linuksa.

Dla wyjaśnienia, nie proszę o usunięcie (base)z mojej $PS1prośby o to, aby Conda nie aktywowała bazy po otwarciu sesji terminalowej.


Czy próbowałeś użyć source activatezamiast tego? aka "metoda oldschool"
Jena

Odpowiedzi:


481

Mam conda 4.6 z podobnym blokiem kodu, który został dodany przez conda. W moim przypadku istnieje ustawienie konfiguracji conda, aby wyłączyć automatyczną aktywację bazy:

conda config --set auto_activate_base false

Przy pierwszym uruchomieniu utworzy on ./condarcw twoim katalogu domowym takie ustawienie, aby zastąpić domyślny.

Nie zaśmieca to twojego, .bash_profileale jest to czystsze rozwiązanie bez ręcznej edycji tej sekcji, którą zarządza conda.


1
Wspaniały. Gdzie dowiedziałeś się o tym ustawieniu? Ponieważ nie pamiętam, aby go czytać w tutorialach wprowadzających?
DryLabRebel

6
@DryLabRebel Nie jest wymieniony w uwagach do wydania, ale można go znaleźć w opcjach konfiguracji, uruchamiając conda config --describe. Przeszukanie bazy kodu dla „auto_activate_base” wydaje się pokazać Conda v4.6.0 to wprowadzenie.
merv

2
Ups, przegapiłem twoje pytanie. Przepraszam! @merv ma rację, ponieważ jest w konfiguracji. Patrzyłem na różne opcje dla innego problemu i widziałem tę opcję.
Jieong

5
@DryLabRebel Po zainicjowaniu Anacondy przez instalatora, drukuje się: Jeśli wolisz, aby podstawowe środowisko Conda nie było aktywowane podczas uruchamiania, ustaw parametr auto_activate_base na false: conda config --set auto_activate_base falseDziękujemy za zainstalowanie Anaconda3!
Zhi Yuan

5
Dziękuję bardzo za tę odpowiedź. IMO powinno to być zachowanie domyślne. Dla tych z Linuksem, którzy mogą się zastanawiać, czy powinni podążać za połączonym pytaniem o Linux, po prostu wykonaj to, wydaje się, że działa niezależnie od systemu operacyjnego (Linux Mint tutaj)
Kamel

22

Odpowiedź zależy trochę od wersji conda, którą zainstalowałeś. Dla wersji conda> = 4.4 powinno wystarczyć deactivateśrodowisko conda po inicjalizacji, więc dodaj

conda deactivate

tuż pod

# <<< conda initialize <<<

5
To powinno działać i uogólniać. Ale wolałbym rozwiązanie, które odszyfrowuje mój profil bash, niż go uzupełnia.
DryLabRebel

To, czy potrafisz odszyfrować, zależy od posiadanej wersji conda. Jeśli dobrze rozumiem, kiedy masz condę 4.6, potrzebujesz tylko __conda_setupfunkcji, aby można było sprowadzić całość do 6 linii. Ale nie sądzę, żeby było tu wiele do
odfiltrowania

2
Ale jeśli ręcznie edytujesz tę sekcję, conda nie może już automatycznie nią zarządzać. Sugerowałbym, żeby zostawić to w spokoju.
darthbith,

2
To nie działa, otwierając nową powłokę z dołączonym kodem conda w .zshrc, jestem za każdym razem wpychany do środowiska (podstawowego).
Merlin

1
dokładnie tak, jak powiedział Merlin, uruchomienie nowego terminalu prowadzi do posiadania (bazy) ponownie
jreft56

18

W końcu odkryłem, że jeśli skomentowałem blok inicjalizacji Conda w następujący sposób:

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

Działa dokładnie tak, jak chcę. Oznacza to, że Conda jest dostępna do aktywacji środowiska, jeśli chcę, ale domyślnie się nie aktywuje.


5
Niestety, jeśli zawartością bloku zarządzają inne skrypty, jak stwierdzono na początku bloku kodu, zmiana ta może zostać zastąpiona lub wycofana przez inne skrypty.
Kukanani,

@DryLabRebel - czy kiedykolwiek znalazłeś solidne podejście, które usunęło bałagan z rcpliku? Byłbym również zainteresowany tym, ponieważ mogę traktować conda jak inne envs, zamiast zaśmiecać rzeczy
baxx

@baxx nie, nie mam. Jeśli chcesz mieć najnowszą wersję conda i chcesz, żeby działała, naprawdę potrzebujesz komend inicjalizacyjnych.
DryLabRebel

ok pozdrawiam, czuję, że może być jakiś sposób, jeśli po prostu zainstalujesz conda env w katalogu projektu, a nie w scentralizowanej lokalizacji. Jeszcze nie jestem pewien
baxx

Wydaje się, że ma tylko wady w porównaniu do używania conda config --set auto_activate_base false, można rozwinąć?
AMC

16

Istnieją 3 sposoby na osiągnięcie tego po conda4.6. (Ostatnia metoda ma najwyższy priorytet.)

  1. Użyj polecenia podrzędnego, conda configaby zmienić ustawienie.

    conda config --set auto_activate_base false
  2. W rzeczywistości poprzednie conda configpolecenie podrzędne zmienia plik konfiguracyjny .condarc. Możemy modyfikować .condarcbezpośrednio. Dodaj następujące treści do .condarcswojego katalogu domowego,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. Ustaw zmienną środowiskową CONDA_AUTO_ACTIVATE_BASEw pliku inicjującym powłoki. ( .bashrcdla bash, .zshrcdla zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Aby przekonwertować z condarcnazwy parametru konfiguracyjnego opartego na plikach na nazwę parametru zmiennej środowiskowej, nadaj mu nazwę wielkimi literami i dopisz CONDA_ . Na przykład always_yesparametr konfiguracyjny conda można określić za pomocą CONDA_ALWAYS_YESzmiennej środowiskowej.

    Ustawienia środowiska mają pierwszeństwo przed odpowiednimi ustawieniami w .condarcpliku.

Bibliografia


świetna odpowiedź. Używam metody env var w skryptach do kontrolowania tego zachowania w następujący sposób:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree

Musiałem dodać export CONDA_AUTO_ACTIVATE_BASE=falsedo mojego .zshrc, aby opcja 3 działała.
normanius

9

Aby wyłączyć automatyczną aktywację środowiska conda base w terminalu:

conda config --set auto_activate_base false

Aby aktywować środowisko podstawowe Conda:

conda activate

3
Hej, ta odpowiedź jest poprawna, ale jest praktycznie identyczna z odpowiedzią zaakceptowaną. Moje pytanie nie dotyczy aktywacji mieszkania, jest to jedna z pierwszych rzeczy, których uczysz się, przechodząc przez samouczki. Zastanów się nad dodaniem przydatnych, istotnych informacji, które nie zostały jeszcze podane w poprzednich odpowiedziach.
DryLabRebel

2
Szukałem sposobu ręcznej aktywacji po wyłączeniu auto. Dzięki!
wigilia

To pomogło. Szukałem również, jak ręcznie aktywować conda po wyłączeniu automatycznej aktywacji.
Chris Njuguna,

1

Jedną z rzeczy, o których nie wspomniano, jest to, że nie ma żadnej różnicy między brakiem aktywnego środowiska a aktywacją środowiska podstawowego, jeśli chcesz tylko uruchamiać aplikacje z katalogu skryptów Condy (Python) (jak chce @DryLabRebel) ).

Możesz zainstalować i odinstalować za pomocą conda, a conda pokazuje środowisko podstawowe jako aktywne - co w zasadzie jest to:

> 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

Jeśli chcesz zachować prostotę bashrc, możesz usunąć cały conda initwygenerowany bałagan i zachować tylko jedną linię:

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

Zobacz Zalecana zmiana, aby włączyć conda w powłoce .

Dzięki temu polecenie conda będzie dostępne bez aktywacji środowiska podstawowego.

Jeśli chcesz używać bashrc w innych systemach, w których conda nie jest zainstalowanych w tej samej ścieżce, możesz również zachować linie if/ fi, aby uniknąć komunikatów o błędach, tj .:

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

Jeśli chcesz uprościć swój bashrc, możesz usunąć cały bałagan generowany przez conda init i zachować tylko jedną linię „Bałagan”, który mówi !! Treściami w tym bloku zarządza „conda init” !! ? Jaka jest zaleta robienia tego zamiast zmiany odpowiedniej opcji ustawienia / konfiguracji Conda?
AMC

-2

To może być błąd ostatniej anakondy. Co dla mnie działa:

krok 1: vim /anaconda/bin/activatepokazuje:

 #!/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 "$@"

krok 2: skomentuj ostatni wiersz: # conda activate "$@"


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.