Comment empêcher Conda d'activer l'environnement de base par défaut?

235

J'ai récemment installé anaconda2 sur mon Mac. Par défaut, Conda est configuré pour activer l'environnement de base lorsque j'ouvre une nouvelle session de terminal.

Je veux accéder aux commandes de Conda (c'est-à-dire que je veux que le chemin vers Conda soit ajouté à mon $ PATH, ce que Conda fait lors de l'initialisation, donc ça va).

Mais je ne programme pas d'habitude en python, et je ne veux pas que Conda active un environnement par défaut.

Lors de la première exécution à conda initpartir de l'invite, Conda ajoute ce qui suit à mon .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 je commente tout le bloc, je ne peux activer aucun environnement Conda.

J'ai essayé de commenter tout le bloc à l'exception de

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

Mais quand j'ai commencé une nouvelle session et essayé d'activer un environnement, j'ai reçu ce message d'erreur:

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

Cette question (et d'autres comme celle-ci) est utile, mais ne répond finalement pas à ma question et convient mieux aux utilisateurs de Linux.

Par souci de clarté, je ne demande pas de retirer le (base)de mon, $PS1je demande à Conda de ne pas activer la base lorsque j'ouvre une session de terminal.

DryLabRebel
la source
Avez-vous essayé d'utiliser à la source activateplace? alias "la méthode oldschool"
jena

Réponses:

483

J'ai conda 4.6 avec un bloc de code similaire qui a été ajouté par conda. Dans mon cas, il y a un paramètre de configuration conda pour désactiver l'activation automatique de la base:

conda config --set auto_activate_base false

La première fois que vous l'exécutez, il créera un ./condarcdans votre répertoire personnel avec ce paramètre pour remplacer la valeur par défaut.

Cela ne .bash_profiledésencombrerait pas votre mais c'est une solution plus propre sans modification manuelle de la section gérée par conda.

jieong
la source
1
Génial. Où avez-vous découvert le cadre? Parce que je ne me souviens pas l'avoir lu dans les tutoriels d'introduction?
DryLabRebel
6
@DryLabRebel Il n'est mentionné dans aucune note de publication, mais vous pouvez le trouver décrit dans les options de configuration en exécutant conda config --describe. La recherche dans la base de code de "auto_activate_base" semble montrer que Conda v4.6.0 est l'introduction.
merv
2
Oups, vous avez manqué votre question. Désolé! @merv est correct en ce sens qu'il se trouve dans la configuration. Je cherchais différentes options pour un problème différent et j'ai vu cette option.
jieong
5
@DryLabRebel Après que l'installateur a initialisé Anaconda, il s'affiche: Si vous préférez que l'environnement de base de conda ne soit pas activé au démarrage, définissez le paramètre auto_activate_base sur false: conda config --set auto_activate_base falseMerci d'avoir installé Anaconda3!
Zhi Yuan
5
Merci beaucoup pour cette réponse. OMI, cela devrait être le comportement par défaut. Pour ceux avec Linux qui peuvent se demander s'ils devraient suivre la question liée à Linux, suivez-la, cela semble fonctionner indépendamment de l'OS (Linux Mint ici)
Kamel
22

La réponse dépend un peu de la version condaque vous avez installée. Pour les versions de conda> = 4.4, cela devrait suffire à deactivatel'environnement conda après l'initialisation, donc ajoutez

conda deactivate

juste en dessous

# <<< conda initialize <<<
Darkbith
la source
5
Cela devrait fonctionner et généraliser. Mais je préférerais une solution qui désencombre mon profil bash, plutôt que d'y ajouter.
DryLabRebel
La possibilité de désencombrer dépend de la version de conda que vous possédez. Si je comprends bien, une fois que vous avez conda 4.6, vous n'avez besoin que de la __conda_setupfonction, vous pouvez donc réduire le tout à 6 lignes. Mais je ne pense pas qu'il y ait beaucoup à désencombrer ici ...
darthbith
2
Mais si vous modifiez manuellement cette section, conda ne peut plus la gérer automatiquement. Je suggérerais de le laisser seul.
darthbith
2
Cela ne fonctionne pas, en ouvrant un nouveau shell avec le code conda ajouté en .zshrc, je suis poussé dans l'environnement (de base) à chaque fois.
Merlin
1
exactement comme Merlin l'a dit, démarrer un nouveau terminal conduit à avoir à nouveau (base)
jreft56
18

Donc à la fin, j'ai trouvé que si je commentais le bloc d'initialisation Conda comme ceci:

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

Cela fonctionne exactement comme je veux. Autrement dit, Conda est disponible pour activer un environnement si je le souhaite, mais ne s'active pas par défaut.

DryLabRebel
la source
5
Malheureusement, si le contenu du bloc est géré par d'autres scripts, comme indiqué au début du bloc de code, cette modification peut être remplacée ou annulée par d'autres scripts.
Kukanani
@DryLabRebel - avez-vous déjà trouvé une approche robuste qui a supprimé l'encombrement du rcfichier? Cela m'intéresserait aussi, de pouvoir simplement traiter le conda comme les autres envs, plutôt que d'encombrer les choses
baxx
@baxx non, je ne l'ai pas fait. Si vous voulez la dernière version de conda et que vous voulez qu'elle fonctionne, alors vous avez vraiment besoin des commandes d'initialisation.
DryLabRebel
ok cheers, je pense qu'il pourrait y avoir un moyen de contourner si vous installez juste la conda env dans le répertoire du projet, pas dans un emplacement centralisé. Pas trop sûr encore
baxx
Il semble que cela n'ait que des inconvénients par rapport à l'utilisation conda config --set auto_activate_base false, pouvez-vous élaborer?
AMC
16

Il existe 3 façons d'y parvenir après conda4.6. (La dernière méthode a la priorité la plus élevée.)

  1. Utilisez la sous-commande conda configpour modifier le paramètre.

    conda config --set auto_activate_base false
  2. En fait, l'ancienne conda configsous-commande change le fichier de configuration .condarc. Nous pouvons modifier .condarcdirectement. Ajoutez le contenu suivant dans .condarcvotre répertoire personnel,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. Définissez la variable d'environnement CONDA_AUTO_ACTIVATE_BASEdans le fichier init du shell. ( .bashrcpour bash, .zshrcpour zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Pour convertir le condarcnom du paramètre de configuration basé sur fichier en nom de paramètre de variable d'environnement, mettez le nom en majuscules et ajoutez-le CONDA_ . Par exemple, le always_yesparamètre de configuration de conda peut être spécifié à l'aide d'une CONDA_ALWAYS_YESvariable d'environnement.

    Les paramètres d'environnement ont priorité sur les paramètres correspondants dans le .condarcfichier.

Références

Simba
la source
très bonne réponse. j'utilise la méthode env var dans les scripts pour contrôler ce comportement comme ceci:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree
J'ai dû ajouter export CONDA_AUTO_ACTIVATE_BASE=falseà mon .zshrc pour que l'option 3 fonctionne.
normanius
9

Pour désactiver l'activation automatique de l'environnement conda base dans le terminal:

conda config --set auto_activate_base false

Pour activer l'environnement conda base:

conda activate
kudibaba
la source
3
Hé, cette réponse est correcte, mais est pratiquement identique à la réponse acceptée. Ma question ne concerne pas l'activation du condo, c'est l'une des premières choses que vous apprenez en parcourant les tutoriels. Pensez à ajouter des informations utiles et pertinentes qui n'ont pas encore été fournies dans les réponses précédentes.
DryLabRebel
2
Je cherchais comment activer manuellement après avoir désactivé auto. Merci!
eigil
Cela a aidé. Je cherchais également comment activer manuellement conda après avoir désactivé l'auto-activation.
Chris Njuguna
1

Une chose qui n'a pas été soulignée, c'est qu'il n'y a pas ou peu de différence entre l'absence d'un environnement actif et l'activation de l'environnement de base, si vous souhaitez simplement exécuter des applications à partir du répertoire de scripts de Conda (Python) (comme le souhaite @DryLabRebel ).

Vous pouvez installer et désinstaller via conda et conda affiche l'environnement de base comme actif - ce qui est essentiellement le cas:

> 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
la source
0

Si vous voulez garder votre bashrc simple, vous pouvez supprimer tout l' conda initencombrement généré et ne conserver qu'une seule ligne:

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

Voir Modification recommandée pour activer la conda dans votre shell .

Cela rendra la commande conda disponible sans activer l'environnement de base.

Si vous souhaitez utiliser votre bashrc sur d'autres systèmes où conda n'est pas installé sur le même chemin, vous pouvez également conserver les lignes if/ fipour éviter les messages d'erreur, c'est-à-dire:

if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
fi
Coldfix
la source
Si vous voulez garder votre bashrc simple, vous pouvez supprimer tout le fouillis généré par conda init, et ne garder qu'une seule ligne Le "fouillis" qui dit !! Le contenu de ce bloc est géré par 'conda init' !! ? Quel est l'avantage de faire cela au lieu de simplement changer l'option de configuration / configuration Conda appropriée?
AMC
-2

Cela pourrait être un bug de la récente anaconda. Ce qui fonctionne pour moi:

step1:, vim /anaconda/bin/activateil montre:

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

étape 2: commentez la dernière ligne: # conda activate "$@"

CcMango
la source