Como apagar ambientes conda no Mac e liberar o espaço
Alguns meses trabalhando com dados deixam no Mac ambientes conda que ninguém lembra de ter criado: um por curso, um por artigo, um para uma ferramenta que você testou uma vez. Cada um tem seu próprio Python e seus pacotes, e junto com o cache de pacotes do conda podem ocupar dezenas de gigabytes. Removê-los são dois comandos, mas o espaço muitas vezes não volta depois do primeiro, e o motivo é como o conda compartilha arquivos entre ambientes.
Este guia mostra como listar o que você tem, remover um ambiente por nome ou por caminho, por que o número do disco quase não muda depois e como o conda clean devolve o resto. Vale para Anaconda, Miniconda, Miniforge e Mambaforge. Para remover o próprio conda, desinstalar Python e Node no Mac cobre isso.
Liste seus ambientes
conda env list
A mesma lista sai com conda info --envs. O ambiente ativo leva um asterisco e cada linha mostra sua pasta, em geral ~/miniconda3/envs/<name> ou ~/anaconda3/envs/<name>. A linha sem nome é o base, o ambiente em que o próprio conda vive; deixe-o em paz.
Para ver quanto cada um usa:
conda info --size
Isso informa o uso de disco do conda por ambiente. Se a sua versão do conda não tem esse comando, meça as pastas diretamente:
du -sh ~/miniconda3/envs/* ~/miniconda3/pkgs
Troque miniconda3 por anaconda3, miniforge3 ou mambaforge conforme a sua instalação.
Salve antes de remover
Guardar um ambiente que você talvez precise de novo custa um arquivo pequeno. Ative-o e exporte:
conda activate myenv
conda env export --from-history > myenv.yml
O --from-history grava só os pacotes que você pediu, então o arquivo pode ser reconstruído em outro Mac ou em um conda mais novo. Para uma reconstrução idêntica byte a byte na mesma plataforma, use conda list --explicit > myenv-spec.txt. Qualquer um dos arquivos traz o ambiente de volta depois com conda create --file myenv.yml (ou conda env create --file myenv.yml em versões mais antigas).
Remova um ambiente
A documentação do conda diz que o ambiente não pode estar ativo ao ser removido, então saia dele primeiro:
conda deactivate
conda remove --name myenv --all
O conda env remove --name myenv faz o mesmo. Acrescente --dry-run para ver o que sairia sem remover nada.
Um ambiente criado com --prefix fora de envs, como dentro da pasta de um projeto, não tem um nome que o conda consiga procurar. Remova-o pelo caminho:
conda remove --prefix ~/projects/thesis/.env --all
Mover a pasta de um ambiente para o Lixo pelo Finder libera os mesmos arquivos, mas o comando é o caminho mais limpo: ele também atualiza o registro de ambientes do próprio conda, que o conda env list e o conda clean leem.
Por que o espaço não voltou
O conda baixa cada pacote uma só vez para o seu cache de pacotes, pkgs na pasta de instalação, e depois cria links físicos desses arquivos em cada ambiente que os usa. A documentação do conda resume assim: os ambientes ocupam pouco espaço graças aos links físicos. Um link físico é um segundo nome para os mesmos dados no disco, então os dados ficam até o último nome sumir.
Remover um ambiente apaga os nomes dele. A cópia em pkgs continua lá, e por isso o du na pasta de instalação parece quase igual ao de antes. O cache também guarda os arquivos .conda e .tar.bz2 baixados e os índices dos canais, e nenhum ambiente precisa deles depois que o pacote está instalado.
Devolva o resto com conda clean
Veja primeiro:
conda clean --all --dry-run
Depois execute:
conda clean --all
| Opção | O que remove |
|---|---|
-i, --index-cache |
Arquivos de índice de canais baixados; o conda os baixa de novo |
-t, --tarballs |
Arquivos de pacotes já extraídos no cache |
-p, --packages |
Pacotes extraídos aos quais nenhum ambiente está ligado |
-c, --tempfiles |
Arquivos temporários que sobraram |
-l, --logfiles |
Arquivos de log |
-a, --all |
Tudo o que está acima |
Vale ler um aviso da documentação do conda antes do -p: ele só verifica os ambientes que o conda info --envs lista. Um ambiente que ele não conhece, por exemplo um criado por outra instalação do conda ou registrado em outro usuário, pode perder pacotes aos quais ainda está ligado. Se você mantém ambientes fora dos lugares normais, rode conda env list antes e confirme que eles aparecem.
Não use --force-pkgs-dirs. Ele apaga todos os caches de pacotes graváveis, de propósito não faz parte do --all e quebra os ambientes que dependem desses arquivos.
Mamba e outras instalações
O Mamba aceita os mesmos comandos: mamba env list, mamba remove --name myenv --all, mamba clean --all. Se você tem mais de um instalador, digamos um Anaconda de anos atrás e o Miniforge de agora, cada um tem seus próprios envs e pkgs; faça a limpeza com o conda de cada um, ou confira as duas pastas no Finder antes de achar que o espaço foi para outro lugar. CONDA_PKGS_DIRS e CONDA_ENVS_PATH movem essas pastas se estiverem definidas no seu shell.
Onde o Mole entra
A aba Limpar do Mole procura instalações do conda na sua pasta pessoal (~/miniconda3, ~/anaconda3, ~/miniforge3, ~/mambaforge e as duas em ~/opt) e só conta aquela que tem pastas conda-meta e pkgs de verdade. Em Ferramentas de desenvolvimento ela lista um grupo Conda Cache com dois tipos de linha: arquivos de pacotes em pkgs cuja cópia extraída já está no lugar e que não foram tocados há um dia, e a pasta de índices pkgs/cache, o mesmo que o conda clean --index-cache remove. Toda linha vem marcada como Revisar e começa desmarcada. O Mole nunca toca em pacotes extraídos nem em ambientes, nunca executa o conda e move para o Lixo o que você marcar. Remover os ambientes em si continua sendo trabalho do conda remove. Para outros caches de desenvolvimento, limpar caches de desenvolvimento no Mac passa por Xcode, npm e o resto.
Perguntas frequentes
É seguro apagar a pasta pkgs à mão?
A pasta inteira não. Os ambientes têm links físicos para arquivos dela, e o conda espera encontrar seus registros ali. Use conda clean --all, que remove só o que nenhum ambiente precisa.
Remover um ambiente apaga meus notebooks e dados?
Só saem os arquivos dentro da pasta do ambiente. Notebooks, scripts e dados nas pastas dos seus projetos ficam, a menos que você tenha criado o ambiente com --prefix dentro do projeto e guardado dados nessa mesma pasta.
Posso remover o ambiente base?
Não. O base guarda o próprio conda. Para se livrar de tudo, desinstale o conda, o que o guia para desinstalar Python e Node cobre.
O conda clean --all deixa a próxima instalação mais lenta?
Um pouco. O conda baixa o índice de novo e busca os pacotes que não estão mais no cache. Seus ambientes continuam funcionando.