Como impedir que o Conda ative o ambiente base por padrão?

235

Eu instalei recentemente o anaconda2 no meu Mac. Por padrão, o Conda é configurado para ativar o ambiente base quando abro uma nova sessão do terminal.

Eu quero acessar os comandos do Conda (ou seja, eu quero que o caminho do Conda seja adicionado ao meu $ PATH, o que o Conda faz quando inicializado, o que é bom).

Mas normalmente não programa em python e não quero que o Conda ative um ambiente por padrão.

Ao executar a conda initpartir do prompt, o Conda adiciona o seguinte ao meu .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 eu comentar o bloco inteiro, não posso ativar nenhum ambiente Conda.

Tentei comentar o bloco inteiro, exceto

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

Mas quando iniciei uma nova sessão e tentei ativar um ambiente, recebi esta mensagem de erro:

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

Esta pergunta (e outras semelhantes) são úteis, mas não respondem à minha pergunta e são mais adequadas para usuários do Linux.

Para esclarecimento, não estou pedindo para remover o (base)meu $PS1, estou pedindo que o Conda não ative a base quando abro uma sessão do terminal.

DryLabRebel
fonte
Você já tentou usar source activate? aka "the oldschool method"
jena

Respostas:

483

Eu tenho o conda 4.6 com um bloco de código semelhante que foi adicionado pelo conda. No meu caso, há uma configuração conda para desativar a ativação automática da base:

conda config --set auto_activate_base false

Na primeira vez em que você o executar, ele criará um ./condarcno diretório inicial com essa configuração para substituir o padrão.

Isso não atrapalhará o seu, .bash_profilemas é uma solução mais limpa sem a edição manual da seção que o condda gerencia.

jieong
fonte
1
Ótimo. Onde você descobriu a configuração? Porque não me lembro de lê-lo em nenhum lugar nos tutoriais introdutórios?
DryLabRebel
6
@DryLabRebel Não é mencionado em nenhuma nota de versão, mas você pode encontrá-lo descrito nas opções de configuração executando conda config --describe. Pesquisando na base de código por "auto_activate_base" parece mostrar que o Conda v4.6.0 é a introdução.
merv
2
Opa, perdeu sua pergunta. Desculpe! @merv está correto, pois está na configuração. Eu estava olhando para opções diferentes para um problema diferente e vi essa opção.
jieong
5
@DryLabRebel Após o instalador inicializar o Anaconda, ele será impresso: Se você preferir que o ambiente base da conda não seja ativado na inicialização, defina o parâmetro auto_activate_base como false: conda config --set auto_activate_base falseObrigado por instalar o Anaconda3!
Zhi Yuan
5
Muito obrigado por esta resposta. Na IMO, esse deve ser o comportamento padrão. Para aqueles com Linux que pode estar se perguntando se eles devem seguir a questão Linux ligado, basta seguir este parece funcionar independentemente do sistema operacional (Linux Mint aqui)
Kamel
22

A resposta depende um pouco da versão condaque você instalou. Para versões do conda> = 4.4, deve ser suficiente para deactivateo ambiente conda após a inicialização, portanto, inclua

conda deactivate

logo abaixo

# <<< conda initialize <<<
darthbith
fonte
5
Isso deve funcionar e deve generalizar. Mas eu preferiria uma solução que organizasse meu perfil do bash, em vez de adicionar a ele.
DryLabRebel 03/02/19
Se você pode desorganizar depende de qual versão do conda você possui. Se bem entendi, uma vez que você tenha o conda 4.6, você só precisará da __conda_setupfunção, para poder reduzir tudo para 6 linhas. Mas eu não acho que há muito a declutter aqui ...
darthbith
2
Mas se você editar manualmente essa seção, o conda não poderá mais gerenciá-la automaticamente. Eu sugeriria apenas deixá-lo sozinho.
darthbith
2
Isso não funciona, abrindo um novo shell com o código conda anexado em .zshrc. Eu sempre sou empurrado para o ambiente (base).
Merlin
1
exactamente como Merlin disse, a partir de novas ligações terminais ter (base) novamente
jreft56
18

Então, no final, descobri que se eu comentei o bloco de inicialização do Conda da seguinte forma:

# >>> 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 exatamente como eu quero. Ou seja, o Conda está disponível para ativar um ambiente, se eu quiser, mas não é ativado por padrão.

DryLabRebel
fonte
5
Infelizmente, se o conteúdo do bloco for gerenciado por outros scripts, conforme declarado no início do bloco de código, essa alteração poderá ser substituída ou revertida por outros scripts.
Kukanani 18/09/19
@DryLabRebel - você já encontrou uma abordagem robusta que removeu a confusão do rcarquivo? Eu também estaria interessado nisso, sendo capaz de tratar a conda como outros envs, em vez de
bagunçar as
@axx não, eu não tenho. Se você deseja a versão mais recente do conda e deseja que ele funcione, é necessário realmente os comandos de inicialização.
DryLabRebel 23/02
Olá, sinto que pode haver uma maneira de contornar, se você acabou de instalar o cond cond no diretório do projeto, não em um local centralizado. Ainda não tenho certeza ainda
baxx 23/02
Parece que só tem desvantagens em relação ao uso conda config --set auto_activate_base false, você pode elaborar?
AMC
16

Existem três maneiras de conseguir isso depois da conda4.6. (O último método tem a maior prioridade.)

  1. Use o subcomando conda configpara alterar a configuração.

    conda config --set auto_activate_base false
  2. De fato, o antigo conda configsubcomando está alterando o arquivo de configuração .condarc. Nós podemos modificar .condarcdiretamente. Adicione o seguinte conteúdo no .condarcdiretório inicial,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. Defina a variável de ambiente CONDA_AUTO_ACTIVATE_BASEno arquivo init do shell. ( .bashrcpara bash, .zshrcpara zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Para converter do condarcnome do parâmetro de configuração baseado em arquivo no nome do parâmetro da variável de ambiente, coloque o nome em maiúsculas e faça o prefixo CONDA_ . Por exemplo, o always_yesparâmetro de configuração do conda pode ser especificado usando uma CONDA_ALWAYS_YESvariável de ambiente.

    As configurações do ambiente têm precedência sobre as configurações correspondentes no .condarcarquivo.

Referências

Simba
fonte
Ótima resposta. Eu uso o método env var dentro de scripts para controlar esse comportamento da seguinte forma:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree 17/01
Eu tive que adicionar export CONDA_AUTO_ACTIVATE_BASE=falseao meu .zshrc para a opção 3 funcionar.
normanius
9

Para desativar a ativação automática do ambiente base conda no terminal:

conda config --set auto_activate_base false

Para ativar o ambiente base conda:

conda activate
kudibaba
fonte
3
Ei, esta resposta está correta, mas é praticamente idêntica à resposta aceita. Minha pergunta não está relacionada à ativação do condomínio, esta é uma das primeiras coisas que você aprende ao passar pelos tutoriais. Considere adicionar algumas informações úteis e relevantes ainda não fornecidas nas respostas anteriores.
DryLabRebel 11/11/19
2
Eu estava procurando como ativar manualmente depois de desativar o auto. Obrigado!
Eigil
Isso ajudou. Eu também estava procurando como ativar manualmente o conda depois de desativar a ativação automática.
Chris Njuguna 8/01
1

Uma coisa que não foi apontada é que há pouca ou nenhuma diferença entre não ter um ambiente ativo e ativar o ambiente base, se você quiser executar aplicativos do diretório de scripts da Conda (Python) (como @DryLabRebel deseja )

Você pode instalar e desinstalar via conda e o conda mostra o ambiente base como ativo - o que essencialmente é:

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

Se você quiser manter o bashrc simples, poderá remover toda a conda initconfusão gerada e manter apenas uma única linha:

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

Consulte Alteração recomendada para ativar o conda no seu shell .

Isso disponibilizará o comando conda sem ativar o ambiente base.

Se você deseja usar o bashrc em outros sistemas em que o conda não está instalado no mesmo caminho, você pode manter as linhas if/ fipara evitar mensagens de erro, ou seja:

if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
fi
coldfix
fonte
Se você quiser manter o seu bashrc simples, você pode remover todo o Conda o init gerado desordem, e manter apenas uma única linha A "desordem" que diz !! O conteúdo deste bloco é gerenciado por 'conda init' !! ? Qual é a vantagem de fazer isso em vez de apenas alterar a opção apropriada de configuração / configuração do Conda?
AMC
-2

Isso pode ser um bug da anaconda recente. O que funciona para mim:

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: comente a última linha: # conda activate "$@"

CcMango
fonte