¿Cómo evito que Conda active el entorno base de forma predeterminada?

235

Recientemente instalé anaconda2 en mi Mac. Por defecto, Conda está configurado para activar el entorno base cuando abro una nueva sesión de terminal.

Quiero acceder a los comandos de Conda (es decir, quiero que la ruta a Conda se agregue a mi $ PATH, que Conda hace cuando se inicializa, así que está bien).

Pero normalmente no programo en Python, y no quiero que Conda active un entorno por defecto.

Cuando se ejecuta por primera vez conda initdesde el indicador, Conda agrega lo siguiente a mi .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 <<<

Si comento todo el bloque, no puedo activar ningún entorno Conda.

Traté de comentar todo el bloque, excepto

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

Pero cuando comencé una nueva sesión e intenté activar un entorno, recibí este mensaje de error:

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

Esta pregunta (y otras similares) son útiles, pero en última instancia no responde a mi pregunta y es más adecuada para usuarios de Linux.

Para aclarar, no estoy pidiendo que elimine el (base)archivo $PS1. Estoy pidiendo que Conda no active la base cuando abro una sesión de terminal.

DryLabRebel
fuente
¿Has intentado usar source activateen su lugar? también conocido como "el método de la vieja escuela"
jena

Respuestas:

483

Tengo conda 4.6 con un bloque de código similar que fue agregado por conda. En mi caso, hay una configuración de configuración de conda para deshabilitar la activación de base automática:

conda config --set auto_activate_base false

La primera vez que lo ejecute, creará un ./condarcdirectorio de inicio con esa configuración para anular el valor predeterminado.

Esto no desordenará su, .bash_profilepero es una solución más limpia sin la edición manual de esa sección que administra Conda.

jieong
fuente
1
Excelente. ¿Dónde se enteró de la configuración? ¿Porque no recuerdo haberlo leído en ninguna parte de los tutoriales introductorios?
DryLabRebel
66
@DryLabRebel No se menciona en ninguna Nota de versión, pero puede encontrarlo descrito en las opciones de configuración ejecutando conda config --describe. La búsqueda en la base de código para "auto_activate_base" parece mostrar que Conda v4.6.0 es la introducción.
merv
2
Vaya, perdí tu pregunta. ¡Lo siento! @merv es correcto porque está en la configuración. Estaba buscando diferentes opciones para un problema diferente y vi esa opción.
jieong
55
@DryLabRebel Después de que el instalador inicializó Anaconda, imprime: Si prefiere que el entorno base de conda no se active al inicio, configure el parámetro auto_activate_base en falso: ¡ conda config --set auto_activate_base falseGracias por instalar Anaconda3!
Zhi Yuan
55
Muchas gracias por esta respuesta. En mi opinión, este debería ser el comportamiento predeterminado. Para aquellos con Linux que pueden preguntarse si deberían seguir la pregunta de Linux vinculada, simplemente sigan esto, parece funcionar independientemente del sistema operativo (Linux Mint aquí)
Kamel
22

La respuesta depende un poco de la versión condaque haya instalado. Para las versiones de conda> = 4.4, debería ser suficiente para deactivateel entorno de conda después de la inicialización, así que agregue

conda deactivate

justo debajo

# <<< conda initialize <<<
Darthbith
fuente
55
Eso debería funcionar y debería generalizarse. Pero preferiría una solución que despeje mi perfil de bash, en lugar de agregarlo.
DryLabRebel
El hecho de que pueda ordenar depende de la versión de conda que tenga. Si entiendo correctamente, una vez que tenga conda 4.6, solo necesita la __conda_setupfunción, por lo que puede reducirlo a 6 líneas. Pero no creo que haya mucho que hacer aquí ...
darthbith
2
Pero si edita manualmente esa sección, entonces conda ya no podrá administrarla automáticamente. Sugeriría simplemente dejarlo solo.
darthbith
2
Esto no funciona, abriendo un nuevo shell con el código conda adjunto en .zshrc me empujan al entorno (base) cada vez.
Merlin
1
exactamente como dijo Merlín, comenzar una nueva terminal conduce a tener (base) nuevamente
jreft56
18

Así que al final descubrí que si comentaba el bloque de inicialización de Conda así:

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

Funciona exactamente como quiero. Es decir, Conda está disponible para activar un entorno si lo deseo, pero no se activa de manera predeterminada.

DryLabRebel
fuente
55
Desafortunadamente, si el contenido del bloque es administrado por otras secuencias de comandos, como se indicó al comienzo del bloque de código, este cambio puede ser reemplazado o revertido por otras secuencias de comandos.
Kukanani
@DryLabRebel: ¿alguna vez encontró un enfoque robusto que eliminó el desorden del rcarchivo? También me interesaría esto, poder tratar a la conda como a otras envidias, en lugar de desordenar las cosas
baxx
@baxx no, no lo he hecho. Si desea la última versión de conda y quiere que funcione, entonces realmente necesita los comandos de inicialización.
DryLabRebel
ok saludos, creo que podría haber una forma de evitarlo si solo instalamos el conda env en el directorio del proyecto, no en una ubicación centralizada. Todavía no estoy seguro
baxx
Parece que solo tiene desventajas en comparación con el uso conda config --set auto_activate_base false, ¿puedes explicarlo?
AMC
16

Hay 3 formas de lograr esto después de conda4.6. (El último método tiene la máxima prioridad).

  1. Use el subcomando conda configpara cambiar la configuración.

    conda config --set auto_activate_base false
  2. De hecho, el antiguo conda configsubcomando está cambiando el archivo de configuración .condarc. Podemos modificar .condarcdirectamente. Agregue el siguiente contenido en .condarcsu directorio de inicio,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. Establezca la variable de entorno CONDA_AUTO_ACTIVATE_BASEen el archivo de inicio del shell. ( .bashrcpara bash, .zshrcpara zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Para convertir del condarcnombre del parámetro de configuración basado en archivo al nombre del parámetro de la variable de entorno, ponga el nombre en mayúsculas y anteponga CONDA_ . Por ejemplo, el always_yesparámetro de configuración de conda se puede especificar utilizando una CONDA_ALWAYS_YESvariable de entorno.

    La configuración del entorno tiene prioridad sobre la configuración correspondiente en el .condarcarchivo.

Referencias

Simba
fuente
gran respuesta. uso el método env var dentro de los scripts para controlar este comportamiento de la siguiente manera:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree
Tuve que agregar export CONDA_AUTO_ACTIVATE_BASE=falsea mi .zshrc para que la opción 3 funcione.
normanius
9

Para deshabilitar la activación automática del entorno base de conda en la terminal:

conda config --set auto_activate_base false

Para activar el entorno base de conda:

conda activate
kudibaba
fuente
3
Hola, esta respuesta es correcta, pero es prácticamente idéntica a la respuesta aceptada. Mi pregunta no tiene que ver con la activación del condominio, esta es una de las primeras cosas que aprende cuando revisa los tutoriales. Considere agregar información útil y relevante que aún no se proporcionó en las respuestas anteriores.
DryLabRebel
2
Estaba buscando cómo activar manualmente después de desactivar auto. ¡Gracias!
Eigil
Esto ayudó También estaba buscando cómo activar manualmente conda después de deshabilitar la activación automática.
Chris Njuguna
1

Una cosa que no se ha señalado es que hay poca o ninguna diferencia entre no tener un entorno activo y activar el entorno base, si solo desea ejecutar aplicaciones desde el directorio de scripts de Conda (Python) (como quiere @DryLabRebel )

Puede instalar y desinstalar a través de conda y conda muestra el entorno base como activo, que esencialmente es:

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

Si desea mantener su bashrc simple, puede eliminar todo el conda initdesorden generado y mantener solo una línea:

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

Consulte Cambio recomendado para habilitar conda en su shell .

Esto hará que el comando conda esté disponible sin activar el entorno base.

Si desea utilizar su bashrc en otros sistemas donde conda no está instalado en la misma ruta, también puede mantener las líneas if/ fipara evitar mensajes de error, es decir:

if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
fi
coldfix
fuente
Si desea mantener su bashrc simple, puede eliminar todo el desorden generado por conda init, y mantener solo una sola línea El "desorden" que dice !! ¡Los contenidos dentro de este bloque son administrados por 'conda init'! ? ¿Cuál es la ventaja de hacer esto en lugar de simplemente cambiar la opción de configuración / configuración de Conda adecuada?
AMC
-2

Esto podría ser un error de la anaconda reciente. Lo que funciona para mi:

Paso 1: vim /anaconda/bin/activatemuestra:

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

Paso 2: comentar la última línea: # conda activate "$@"

CcMango
fuente