Eliminare gli ambienti conda su Mac e liberare spazio
Qualche mese di lavoro sui dati lascia su un Mac degli ambienti conda che nessuno ricorda di aver creato: uno per corso, uno per articolo, uno per uno strumento provato una volta. Ognuno contiene il suo Python e i suoi pacchetti, e insieme alla cache dei pacchetti di conda possono occupare decine di gigabyte. Rimuoverli richiede due comandi, ma lo spazio spesso non torna dopo il primo, e il motivo sta nel modo in cui conda condivide i file tra gli ambienti.
Questa guida spiega come elencare ciò che hai, rimuovere un ambiente per nome o per percorso, perché il dato del disco si muove appena e come conda clean restituisce il resto. Vale per Anaconda, Miniconda, Miniforge e Mambaforge. Per rimuovere conda stesso, disinstallare Python e Node su Mac lo spiega.
Elencare gli ambienti
conda env list
Lo stesso elenco arriva da conda info --envs. L’ambiente attivo ha un asterisco e ogni riga mostra la sua cartella, di solito ~/miniconda3/envs/<name> o ~/anaconda3/envs/<name>. La riga senza nome è base, l’ambiente in cui vive conda stesso; lasciala stare.
Per vedere quanto usa ciascuno:
conda info --size
Mostra l’uso del disco di conda per ogni ambiente. Se la tua versione di conda non ce l’ha, misura direttamente le cartelle:
du -sh ~/miniconda3/envs/* ~/miniconda3/pkgs
Sostituisci miniconda3 con anaconda3, miniforge3 o mambaforge in base alla tua installazione.
Salvarlo prima di rimuoverlo
Un ambiente che potresti riusare costa un piccolo file da conservare. Attivalo ed esporta:
conda activate myenv
conda env export --from-history > myenv.yml
--from-history scrive solo i pacchetti che hai richiesto, così il file permette di ricostruire l’ambiente su un altro Mac o con un conda più recente. Per una ricostruzione identica al byte sulla stessa piattaforma, usa invece conda list --explicit > myenv-spec.txt. Entrambi i file riportano l’ambiente in seguito con conda create --file myenv.yml (o conda env create --file myenv.yml nelle versioni più vecchie).
Rimuovere un ambiente
La documentazione di conda dice che l’ambiente non deve essere attivo quando lo rimuovi, quindi esci prima:
conda deactivate
conda remove --name myenv --all
conda env remove --name myenv fa lo stesso. Aggiungi --dry-run per vedere cosa verrebbe rimosso senza rimuovere nulla.
Un ambiente creato con --prefix fuori da envs, per esempio dentro la cartella di un progetto, non ha un nome che conda possa cercare. Rimuovilo per percorso:
conda remove --prefix ~/projects/thesis/.env --all
Spostare la cartella di un ambiente nel Cestino dal Finder libera gli stessi file, ma il comando è la via più pulita: aggiorna anche il registro degli ambienti di conda, che leggono conda env list e conda clean.
Perché lo spazio non è tornato
Conda scarica ogni pacchetto una sola volta nella sua cache dei pacchetti, pkgs nella cartella di installazione, e poi crea hard link di quei file in ogni ambiente che li usa. La documentazione di conda lo dice così: gli ambienti occupano poco spazio grazie agli hard link. Un hard link è un secondo nome per gli stessi dati sul disco, quindi i dati restano finché non sparisce l’ultimo nome.
Rimuovere un ambiente elimina i suoi nomi. La copia in pkgs c’è ancora, ed è per questo che du sulla cartella di installazione appare quasi uguale a prima. La cache conserva anche gli archivi .conda e .tar.bz2 scaricati e i file indice dei canali, di cui nessun ambiente ha bisogno una volta installato il pacchetto.
Recuperare il resto con conda clean
Prima l’anteprima:
conda clean --all --dry-run
Poi esegui:
conda clean --all
| Opzione | Cosa rimuove |
|---|---|
-i, --index-cache |
I file indice dei canali scaricati; conda li scarica di nuovo |
-t, --tarballs |
Gli archivi dei pacchetti già estratti nella cache |
-p, --packages |
I pacchetti estratti a cui nessun ambiente è collegato |
-c, --tempfiles |
I file temporanei rimasti |
-l, --logfiles |
I file di log |
-a, --all |
Tutto quanto sopra |
Un avvertimento della documentazione di conda va letto prima di -p: controlla solo gli ambienti elencati da conda info --envs. Un ambiente che non conosce, per esempio creato da un’altra installazione di conda o registrato con un altro utente, può perdere pacchetti a cui è ancora collegato. Se tieni ambienti fuori dai posti abituali, esegui prima conda env list e verifica che compaiano.
Lascia stare --force-pkgs-dirs. Elimina ogni cache dei pacchetti scrivibile, non fa volutamente parte di --all e rompe gli ambienti che si appoggiano a quei file.
Mamba e altre installazioni
Mamba accetta gli stessi comandi: mamba env list, mamba remove --name myenv --all, mamba clean --all. Se hai più di un installer, per esempio Anaconda di anni fa e ora Miniforge, ognuno ha le proprie envs e pkgs; esegui la pulizia con il conda di ciascuno, oppure controlla entrambe le cartelle nel Finder prima di pensare che lo spazio sia finito altrove. CONDA_PKGS_DIRS e CONDA_ENVS_PATH spostano quelle cartelle se sono impostate nella tua shell.
Il ruolo di Mole
Pulizia in Mole cerca installazioni conda nella tua cartella Home (~/miniconda3, ~/anaconda3, ~/miniforge3, ~/mambaforge e le due sotto ~/opt) e conta solo quelle che hanno vere cartelle conda-meta e pkgs. Sotto Strumenti per sviluppatori elenca un gruppo Conda Cache con due tipi di righe: gli archivi dei pacchetti in pkgs la cui copia estratta è già al suo posto e che non vengono toccati da un giorno, e la cartella indice pkgs/cache, la stessa cosa che rimuove conda clean --index-cache. Ogni riga è contrassegnata come Verifica e parte deselezionata. Mole non tocca mai i pacchetti estratti né gli ambienti, non esegue mai conda e sposta nel Cestino ciò che selezioni. Rimuovere gli ambienti resta un lavoro per conda remove. Per le altre cache di sviluppo, svuotare le cache di sviluppo su Mac passa in rassegna Xcode, npm e il resto.
Domande frequenti
È sicuro eliminare a mano la cartella pkgs?
Non l’intera cartella. Gli ambienti sono collegati con hard link ai file al suo interno e conda si aspetta lì i suoi registri. Usa conda clean --all, che rimuove solo ciò di cui nessun ambiente ha bisogno.
Rimuovere un ambiente elimina i miei notebook e i miei dati?
Spariscono solo i file dentro la cartella dell’ambiente. Notebook, script e dati nelle cartelle dei tuoi progetti restano, a meno che tu non abbia creato l’ambiente con --prefix dentro il progetto e tenuto dati in quella stessa cartella.
Posso rimuovere l’ambiente base?
No. Base contiene conda stesso. Per eliminare tutto, disinstalla conda, cosa che la guida alla disinstallazione di Python e Node spiega.
conda clean --all rallenterà la mia prossima installazione?
Leggermente. Conda scarica di nuovo l’indice e recupera i pacchetti che non ha più nella cache. I tuoi ambienti continuano a funzionare.