Wie verhindere ich, dass Conda die Basisumgebung standardmäßig aktiviert?

234

Ich habe kürzlich anaconda2 auf meinem Mac installiert. Standardmäßig ist Conda so konfiguriert, dass die Basisumgebung aktiviert wird, wenn ich eine neue Terminalsitzung öffne.

Ich möchte Zugriff auf die Conda-Befehle (dh ich möchte, dass der Pfad zu Conda zu meinem $ PATH hinzugefügt wird, was Conda bei der Initialisierung tut, damit das in Ordnung ist).

Aber ich programmiere normalerweise nicht in Python und ich möchte nicht, dass Conda standardmäßig eine Umgebung aktiviert.

Bei der ersten Ausführung conda initüber die Eingabeaufforderung fügt Conda Folgendes zu meinem hinzu .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 <<<

Wenn ich den gesamten Block auskommentiere, kann ich keine Conda-Umgebungen aktivieren.

Ich habe versucht, den ganzen Block bis auf auskommentieren

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

Als ich dann eine neue Sitzung startete und versuchte, eine Umgebung zu aktivieren, wurde folgende Fehlermeldung angezeigt:

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

Diese Frage (und andere, die sie mögen) sind hilfreich, beantworten aber letztendlich meine Frage nicht und sind eher für Linux-Benutzer geeignet.

Zur Verdeutlichung bitte ich nicht, das (base)von meinem zu entfernen. $PS1Ich bitte Conda, die Basis nicht zu aktivieren, wenn ich eine Terminalsitzung öffne.

DryLabRebel
quelle
Haben Sie versucht, source activatestattdessen zu verwenden ? aka "the oldschool method"
jena

Antworten:

481

Ich habe Conda 4.6 mit einem ähnlichen Codeblock, der von Conda hinzugefügt wurde. In meinem Fall gibt es eine Conda-Konfigurationseinstellung, um die automatische Basisaktivierung zu deaktivieren:

conda config --set auto_activate_base false

Wenn Sie es zum ersten Mal ausführen, wird ./condarcin Ihrem Home-Verzeichnis ein mit dieser Einstellung erstellt, um die Standardeinstellung zu überschreiben.

Dies würde Ihre nicht .bash_profileübersichtlich machen, aber es ist eine sauberere Lösung, ohne den Abschnitt, den conda verwaltet, manuell zu bearbeiten.

Jieong
quelle
1
Toll. Wo haben Sie von der Umgebung erfahren? Weil ich mich nicht erinnern kann, es irgendwo in den Einführungs-Tutorials gelesen zu haben?
DryLabRebel
6
@DryLabRebel Es wird in keinem Versionshinweis erwähnt, aber Sie können es in den Konfigurationsoptionen finden, indem Sie es ausführen conda config --describe. Das Durchsuchen der Codebasis nach "auto_activate_base" scheint zu zeigen, dass Conda v4.6.0 die Einführung ist.
Merv
2
Hoppla, ich habe deine Frage verpasst. Es tut uns leid! @merv ist insofern korrekt, als es sich in der Konfiguration befindet. Ich habe verschiedene Optionen für ein anderes Problem geprüft und diese Option gesehen.
Jieong
5
@DryLabRebel Nachdem das Installationsprogramm Anaconda initialisiert hat, wird Folgendes ausgedruckt: Wenn Sie möchten, dass die Basisumgebung von conda beim Start nicht aktiviert wird, setzen Sie den Parameter auto_activate_base auf false: conda config --set auto_activate_base falseVielen Dank, dass Sie Anaconda3 installiert haben!
Zhi Yuan
5
Vielen Dank für diese Antwort. IMO sollte dies das Standardverhalten sein. Für diejenigen mit Linux, die sich fragen, ob sie der verknüpften Linux-Frage folgen sollen, folgen Sie einfach dieser Frage, es scheint unabhängig vom Betriebssystem zu funktionieren (Linux Mint hier)
Kamel
22

Die Antwort hängt ein wenig von der Version ab conda, die Sie installiert haben. Für Versionen von conda> = 4.4 sollte es deactivatenach der Initialisierung für die conda-Umgebung ausreichen. Fügen Sie also hinzu

conda deactivate

direkt darunter

# <<< conda initialize <<<
Darthbith
quelle
5
Das sollte funktionieren und verallgemeinern. Aber ich würde eine Lösung bevorzugen, die mein Bash-Profil dekodiert, anstatt es zu ergänzen.
DryLabRebel
Ob Sie enttäuschen können, hängt davon ab, welche Version von Conda Sie haben. Wenn ich richtig verstehe, brauchen Sie, sobald Sie Conda 4.6 haben, nur die __conda_setupFunktion, damit Sie das Ganze auf 6 Zeilen reduzieren können. Aber ich glaube nicht, dass es hier viel zu enttäuschen gibt ...
Darthbith
2
Wenn Sie diesen Abschnitt jedoch manuell bearbeiten, kann conda ihn nicht mehr automatisch verwalten. Ich würde vorschlagen, es einfach in Ruhe zu lassen.
Darthbith
2
Dies funktioniert nicht. Das Öffnen einer neuen Shell mit dem angehängten Conda-Code in .zshrc wird jedes Mal in die (Basis-) Umgebung verschoben.
Merlin
1
Genau wie Merlin sagte, führt das Starten eines neuen Terminals dazu, wieder (Basis) zu haben
jreft56
18

Am Ende stellte ich fest, dass, wenn ich den Conda-Initialisierungsblock wie folgt auskommentierte:

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

Es funktioniert genau so, wie ich es will. Das heißt, Conda ist verfügbar, um eine Umgebung zu aktivieren, wenn ich möchte, aber nicht standardmäßig aktiviert.

DryLabRebel
quelle
5
Wenn der Blockinhalt von anderen Skripten verwaltet wird, wie am Anfang des Codeblocks angegeben, wird diese Änderung möglicherweise durch andere Skripte ersetzt oder rückgängig gemacht.
Kukanani
@DryLabRebel - Haben Sie jemals einen robusten Ansatz gefunden, der die Unordnung aus der rcDatei entfernt? Das würde mich auch interessieren, wenn ich in der Lage wäre, Conda wie andere Envs zu behandeln, anstatt die Dinge
durcheinander zu bringen
@axx nein habe ich nicht. Wenn Sie die neueste Version von conda möchten und möchten, dass sie funktioniert, benötigen Sie wirklich die Initialisierungsbefehle.
DryLabRebel
ok Prost, ich denke, es könnte einen Ausweg geben, wenn Sie nur die conda env im Projektverzeichnis installieren, nicht an einem zentralen Ort. Ich
bin
Dies scheint nur Nachteile im Vergleich zur Verwendung zu conda config --set auto_activate_base falsehaben. Können Sie das näher erläutern?
AMC
16

Es gibt 3 Möglichkeiten, dies nach conda4.6 zu erreichen . (Die letzte Methode hat die höchste Priorität.)

  1. Verwenden Sie den Unterbefehl conda config, um die Einstellung zu ändern.

    conda config --set auto_activate_base false
  2. Tatsächlich conda configändert der frühere Unterbefehl die Konfigurationsdatei .condarc. Wir können .condarcdirekt ändern . Fügen Sie folgenden Inhalt in .condarcIhr Home-Verzeichnis ein:

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. Legen Sie die Umgebungsvariable CONDA_AUTO_ACTIVATE_BASEin der Init-Datei der Shell fest. ( .bashrcfür Bash, .zshrcfür Zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Um den condarcNamen des dateibasierten Konfigurationsparameters in den Parameternamen der Umgebungsvariablen zu konvertieren , setzen Sie den Namen in Großbuchstaben und voran CONDA_ . Beispielsweise kann der always_yesKonfigurationsparameter von conda mithilfe einer CONDA_ALWAYS_YESUmgebungsvariablen angegeben werden.

    Die Umgebungseinstellungen haben Vorrang vor den entsprechenden Einstellungen in der .condarcDatei.

Verweise

Simba
quelle
gute Antwort. Ich benutze die env var-Methode in Skripten, um dieses Verhalten wie export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
folgt
Ich musste export CONDA_AUTO_ACTIVATE_BASE=falsemeine .zshrc hinzufügen , damit Option 3 funktioniert.
Normanius
9

So deaktivieren Sie die automatische Aktivierung der Conda-Basisumgebung im Terminal:

conda config --set auto_activate_base false

So aktivieren Sie die Conda-Basisumgebung:

conda activate
Kudibaba
quelle
3
Hey, diese Antwort ist richtig, aber praktisch identisch mit der akzeptierten Antwort. Meine Frage betrifft nicht die Aktivierung von Eigentumswohnungen. Dies ist eines der ersten Dinge, die Sie beim Durchlaufen der Tutorials lernen. Erwägen Sie, einige hilfreiche, relevante Informationen hinzuzufügen, die in den vorherigen Antworten noch nicht enthalten sind.
DryLabRebel
2
Ich suchte nach einer manuellen Aktivierung nach dem Deaktivieren von Auto. Vielen Dank!
Eigil
Das hat geholfen. Ich suchte auch nach einer manuellen Aktivierung von Conda nach Deaktivierung der automatischen Aktivierung.
Chris Njuguna
1

Eine Sache, auf die nicht hingewiesen wurde, ist, dass es kaum einen Unterschied zwischen einer nicht aktiven Umgebung und der Aktivierung der Basisumgebung gibt, wenn Sie nur Anwendungen aus dem Skriptverzeichnis von Conda (Python) ausführen möchten (wie @DryLabRebel dies wünscht ).

Sie können über conda installieren und deinstallieren, und conda zeigt die Basisumgebung als aktiv an - was im Wesentlichen Folgendes ist:

> 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
Thorsten
quelle
0

Wenn Sie Ihren bashrc einfach halten möchten, können Sie alle conda initerzeugten Unordnung entfernen und nur eine einzige Zeile beibehalten :

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

Siehe Empfohlene Änderung, um conda in Ihrer Shell zu aktivieren .

Dadurch wird der Befehl conda verfügbar, ohne die Basisumgebung zu aktivieren.

Wenn Sie Ihren bashrc auf anderen Systemen verwenden möchten, auf denen conda nicht im selben Pfad installiert ist, können Sie auch die Zeilen if/ beibehalten fi, um Fehlermeldungen zu vermeiden, z.

if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
fi
Coldfix
quelle
Wenn Sie Ihr bashrc einfach halten möchten, können Sie alle durch conda init erzeugten Unordnung entfernen und nur eine einzige Zeile behalten. Die "Unordnung", die sagt !! Der Inhalt dieses Blocks wird von 'conda init' verwaltet !! ? Was ist der Vorteil, anstatt nur die entsprechende Conda-Einstellungs- / Konfigurationsoption zu ändern?
AMC
-2

Dies könnte ein Fehler der jüngsten Anakonda sein. Was funktioniert bei mir:

Schritt 1 : vim /anaconda/bin/activate, zeigt es:

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

Schritt 2: Kommentieren Sie die letzte Zeile aus: # conda activate "$@"

CcMango
quelle