Come posso impedire a Conda di attivare l'ambiente di base per impostazione predefinita?


235

Di recente ho installato anaconda2 sul mio Mac. Per impostazione predefinita, Conda è configurato per attivare l'ambiente di base quando apro una nuova sessione di terminale.

Voglio accedere ai comandi di Conda (cioè voglio che il percorso di Conda venga aggiunto al mio $ PATH che Conda esegue quando viene inizializzato, quindi va bene).

Ma di solito non programma in Python e non voglio che Conda attivi un ambiente per impostazione predefinita.

Alla prima esecuzione conda initdal prompt, Conda aggiunge quanto segue al mio .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 <<<

Se commento l'intero blocco, non posso attivare alcun ambiente Conda.

Ho provato a commentare l'intero blocco tranne per

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

Ma quando ho iniziato una nuova sessione e ho provato ad attivare un ambiente, ho ricevuto questo messaggio di errore:

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

Questa domanda (e piace ad altri) è utile, ma alla fine non risponde alla mia domanda ed è più adatta agli utenti di Linux.

Per chiarimenti, non sto chiedendo di rimuovere (base)dal mio $PS1sto chiedendo a Conda di non attivare la base quando apro una sessione di terminale.


Hai provato a usare source activateinvece? alias "il metodo oldschool"
jena,

Risposte:


483

Ho conda 4.6 con un blocco di codice simile che è stato aggiunto da conda. Nel mio caso, esiste un'impostazione di configurazione conda per disabilitare l'attivazione automatica della base:

conda config --set auto_activate_base false

La prima volta che lo esegui, verrà creato un ./condarcnella tua home directory con quell'impostazione per sovrascrivere il valore predefinito.

Questo non disordinerà il tuo, .bash_profilema è una soluzione più pulita senza la modifica manuale della sezione gestita da conda.


1
Grande. Dove hai scoperto l'impostazione? Perché non ricordo di averlo letto da nessuna parte nei tutorial introduttivi?
DryLabRebel

6
@DryLabRebel Non è menzionato nelle Note di rilascio, ma è possibile trovarlo descritto nelle opzioni di configurazione eseguendo conda config --describe. La ricerca nella base di codice per "auto_activate_base" sembra mostrare che Conda v4.6.0 è l'introduzione.
Merv

2
Oops, ho perso la tua domanda. Scusa! @merv è corretto in quanto è nella configurazione. Stavo esaminando diverse opzioni per un problema diverso e ho visto quell'opzione.
jieong

5
@DryLabRebel Dopo che Anaconda ha inizializzato il programma di installazione, stampa: Se preferisci che l'ambiente di base di conda non venga attivato all'avvio, imposta il parametro auto_activate_base su false: conda config --set auto_activate_base falseGrazie per aver installato Anaconda3!
Zhi Yuan,

5
Grazie mille per questa risposta. IMO questo dovrebbe essere il comportamento predefinito. Per quelli con Linux che potrebbero chiedersi se dovrebbero seguire la domanda Linux collegata, basta seguire questo sembra funzionare indipendentemente dal sistema operativo (Linux Mint qui)
Kamel

22

La risposta dipende un po 'dalla versione condache hai installato. Per le versioni di conda> = 4.4, dovrebbe essere sufficiente per deactivatel'ambiente conda dopo l'inizializzazione, quindi aggiungere

conda deactivate

proprio sotto

# <<< conda initialize <<<

5
Dovrebbe funzionare e dovrebbe generalizzare. Preferirei una soluzione che declivi il mio profilo bash, piuttosto che aggiungerlo.
DryLabRebel,

La declassamento dipende dalla versione del conda in uso. Se ho capito bene, una volta che hai conda 4.6, hai solo bisogno della __conda_setupfunzione, in modo da poter portare il tutto a 6 righe. Ma non credo che ci sia molto da ridimensionare qui ...
Darthbith,

2
Ma se modifichi manualmente quella sezione, conda non può più gestirla automaticamente. Suggerirei di lasciarlo da solo.
Darthbith,

2
Questo non funziona, aprendo una nuova shell con il codice conda allegato in .zshrc ogni volta che mi viene inserito nell'ambiente (base).
Merlin,

1
esattamente come ha detto Merlino, l'avvio di un nuovo terminale porta ad avere di nuovo (base)
jreft56

18

Quindi alla fine ho scoperto che se avessi commentato il blocco di inizializzazione di Conda in questo modo:

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

Funziona esattamente come voglio. Cioè, Conda è disponibile per attivare un ambiente se lo desidero, ma non si attiva per impostazione predefinita.


5
Sfortunatamente, se il contenuto del blocco è gestito da altri script, come indicato all'inizio del blocco di codice, questa modifica potrebbe essere sostituita o annullata da altri script.
Kukanani,

@DryLabRebel - hai mai trovato un approccio solido che ha rimosso il disordine dal rcfile? Sarei interessato anche a questo, essendo in grado di trattare la conda come altri envs, piuttosto che ingombrare le cose
baxx

@baxx no non l'ho fatto. Se vuoi l'ultima versione di conda e vuoi che funzioni, allora hai davvero bisogno dei comandi di inizializzazione.
DryLabRebel,

ok evviva, penso che potrebbe esserci un modo per aggirare il problema se installi la conda env nella directory del progetto, non in una posizione centralizzata. Non sono ancora troppo sicuro
baxx,

Sembra che abbia solo degli aspetti negativi rispetto all'utilizzo conda config --set auto_activate_base false, puoi elaborare?
AMC,

16

Ci sono 3 modi per raggiungere questo obiettivo dopo conda4.6. (L'ultimo metodo ha la massima priorità.)

  1. Utilizzare il comando secondario conda configper modificare l'impostazione.

    conda config --set auto_activate_base false
  2. In effetti, il precedente conda configcomando secondario sta modificando il file di configurazione .condarc. Possiamo modificare .condarcdirettamente. Aggiungi i seguenti contenuti nella .condarctua home directory,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
    
  3. Imposta la variabile d'ambiente CONDA_AUTO_ACTIVATE_BASEnel file init della shell. ( .bashrcper bash, .zshrcper zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Per convertire dal condarcnome del parametro di configurazione basato su file al nome del parametro della variabile di ambiente, rendere tutto il nome in maiuscolo e anteporre CONDA_ . Ad esempio, il always_yesparametro di configurazione di conda può essere specificato utilizzando una CONDA_ALWAYS_YESvariabile di ambiente.

    Le impostazioni dell'ambiente hanno la precedenza sulle impostazioni corrispondenti nel .condarcfile.

Riferimenti


Bella risposta. uso il metodo env var negli script per controllare questo comportamento in questo modo:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree,

Ho dovuto aggiungere il export CONDA_AUTO_ACTIVATE_BASE=falsemio .zshrc affinché l'opzione 3 funzionasse.
Normanius

9

Per disabilitare l'attivazione automatica dell'ambiente base conda nel terminale:

conda config --set auto_activate_base false

Per attivare l'ambiente base conda:

conda activate

3
Ehi, questa risposta è corretta, ma è praticamente identica alla risposta accettata. La mia domanda non riguarda l'attivazione del condominio, questa è una delle prime cose che impari durante l'esercitazione. Valuta di aggiungere alcune informazioni utili e pertinenti non ancora fornite nelle risposte precedenti.
DryLabRebel,

2
Stavo cercando come attivare manualmente dopo aver disabilitato l'auto. Grazie!
eigil

Questo ha aiutato. Stavo anche cercando come attivare manualmente conda dopo aver disabilitato l'auto-attivazione.
Chris Njuguna,

1

Una cosa che non è stata sottolineata è che non c'è poca o nessuna differenza tra il non avere un ambiente attivo e l'attivazione dell'ambiente di base, se si desidera semplicemente eseguire applicazioni dalla directory degli script di Conda (Python) (come vuole @DryLabRebel ).

È possibile installare e disinstallare tramite conda e conda mostra l'ambiente di base come attivo, che essenzialmente è:

> 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

Se vuoi mantenere semplice la tua bashrc, puoi rimuovere tutto il conda initdisordine generato e mantenere una sola riga:

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

Vedi Modifica consigliata per abilitare conda nella tua shell .

Ciò renderà disponibile il comando conda senza attivare l'ambiente di base.

Se vuoi usare il tuo bashrc su altri sistemi in cui conda non è installato nello stesso percorso, puoi mantenere anche le if/ firighe per evitare messaggi di errore, ovvero:

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

Se vuoi mantenere semplice la tua bashrc, puoi rimuovere tutto il disordine generato dalla conda init e mantenere una sola riga Il "disordine" che dice !! I contenuti all'interno di questo blocco sono gestiti da 'conda init' !! ? Qual è il vantaggio di fare questo invece di cambiare solo le impostazioni / impostazioni di configurazione appropriate di Conda?
AMC,

-2

Questo potrebbe essere un bug della recente anaconda. Cosa funziona per me:

step1:, vim /anaconda/bin/activatemostra:

 #!/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: commenta l'ultima riga: # conda activate "$@"


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.