Supprimer des environnements conda sur Mac et libérer l’espace
Quelques mois de travail sur des données laissent sur un Mac des environnements conda dont personne ne se souvient : un par cours, un par article, un pour un outil essayé une fois. Chacun contient son propre Python et ses propres paquets, et avec le cache de paquets de conda, ils peuvent occuper des dizaines de gigaoctets. Les supprimer demande deux commandes, mais l’espace ne revient souvent pas après la première, et la raison tient à la façon dont conda partage les fichiers entre environnements.
Ce guide explique comment lister ce que vous avez, supprimer un environnement par son nom ou par son chemin, pourquoi l’espace disque bouge à peine ensuite et comment conda clean récupère le reste. Il s’applique aussi bien à Anaconda, Miniconda, Miniforge qu’à Mambaforge. Pour supprimer conda lui-même, désinstaller Python et Node sur Mac s’en charge.
Lister vos environnements
conda env list
La même liste s’obtient avec conda info --envs. L’environnement actif porte un astérisque, et chaque ligne indique son dossier, le plus souvent ~/miniconda3/envs/<name> ou ~/anaconda3/envs/<name>. La ligne sans nom est base, l’environnement dans lequel vit conda lui-même ; n’y touchez pas.
Pour voir ce que chacun occupe :
conda info --size
Cela indique l’espace disque utilisé par conda pour chaque environnement. Si votre version de conda ne l’a pas, mesurez directement les dossiers :
du -sh ~/miniconda3/envs/* ~/miniconda3/pkgs
Remplacez miniconda3 par anaconda3, miniforge3 ou mambaforge selon votre installation.
Sauvegarder avant de supprimer
Un environnement dont vous pourriez avoir encore besoin se conserve avec un petit fichier. Activez-le et exportez :
conda activate myenv
conda env export --from-history > myenv.yml
--from-history n’écrit que les paquets que vous avez demandés, de sorte que le fichier permet de reconstruire l’environnement sur un autre Mac ou avec un conda plus récent. Pour une reconstruction à l’octet près sur la même plateforme, utilisez plutôt conda list --explicit > myenv-spec.txt. L’un ou l’autre fichier ramène l’environnement plus tard avec conda create --file myenv.yml (ou conda env create --file myenv.yml sur les versions plus anciennes).
Supprimer un environnement
La documentation de conda indique que l’environnement ne doit pas être actif quand vous le supprimez ; sortez-en d’abord :
conda deactivate
conda remove --name myenv --all
conda env remove --name myenv fait la même chose. Ajoutez --dry-run pour voir ce qui serait supprimé sans rien supprimer.
Un environnement créé avec --prefix en dehors de envs, par exemple dans un dossier de projet, n’a pas de nom que conda puisse retrouver. Supprimez-le par son chemin :
conda remove --prefix ~/projects/thesis/.env --all
Mettre le dossier d’un environnement à la corbeille dans le Finder libère les mêmes fichiers, mais la commande est la voie la plus propre : elle met aussi à jour le registre des environnements de conda, que lisent conda env list et conda clean.
Pourquoi l’espace n’est pas revenu
Conda télécharge chaque paquet une seule fois dans son cache de paquets, pkgs dans le dossier d’installation, puis crée des liens physiques (hard links) de ces fichiers vers chaque environnement qui les utilise. La documentation de conda le formule ainsi : les environnements occupent peu d’espace grâce aux liens physiques. Un lien physique est un second nom pour les mêmes données sur le disque, les données restent donc tant que le dernier nom n’a pas disparu.
Supprimer un environnement efface ses noms. La copie dans pkgs est toujours là, ce qui explique que du sur le dossier d’installation ressemble presque à ce qu’il était. Le cache conserve aussi les archives .conda et .tar.bz2 téléchargées et les fichiers d’index des canaux, dont aucun environnement n’a besoin une fois le paquet installé.
Récupérer le reste avec conda clean
Prévisualisez d’abord :
conda clean --all --dry-run
Puis lancez :
conda clean --all
| Option | Ce qu’elle supprime |
|---|---|
-i, --index-cache |
Les fichiers d’index des canaux téléchargés ; conda les récupère de nouveau |
-t, --tarballs |
Les archives de paquets déjà extraites dans le cache |
-p, --packages |
Les paquets extraits auxquels aucun environnement n’est lié |
-c, --tempfiles |
Les fichiers temporaires restants |
-l, --logfiles |
Les fichiers journaux |
-a, --all |
Tout ce qui précède |
Un avertissement de la documentation de conda mérite d’être lu avant -p : la commande ne vérifie que les environnements listés par conda info --envs. Un environnement qu’elle ne connaît pas, par exemple créé par une autre installation de conda ou enregistré sous un autre utilisateur, peut perdre des paquets auxquels il est encore lié. Si vous gardez des environnements en dehors des emplacements habituels, lancez d’abord conda env list et assurez-vous qu’ils y figurent.
Laissez --force-pkgs-dirs de côté. Il supprime tous les caches de paquets accessibles en écriture, ne fait volontairement pas partie de --all et casse les environnements qui s’appuient sur ces fichiers.
Mamba et autres installations
Mamba accepte les mêmes commandes : mamba env list, mamba remove --name myenv --all, mamba clean --all. Si vous avez plusieurs installateurs, disons Anaconda d’il y a des années et Miniforge aujourd’hui, chacun a ses propres envs et pkgs ; lancez le nettoyage avec le conda de chacun, ou vérifiez les deux dossiers dans le Finder avant de croire que l’espace est parti ailleurs. CONDA_PKGS_DIRS et CONDA_ENVS_PATH déplacent ces dossiers s’ils sont définis dans votre shell.
Le rôle de Mole
Dans Mole, Nettoyer cherche des installations conda dans votre dossier personnel (~/miniconda3, ~/anaconda3, ~/miniforge3, ~/mambaforge et les deux sous ~/opt) et ne compte que celles qui ont de vrais dossiers conda-meta et pkgs. Sous Outils de développement, il liste un groupe Conda Cache avec deux sortes de lignes : les archives de paquets dans pkgs dont la copie extraite est déjà en place et auxquelles on n’a pas touché depuis un jour, et le dossier d’index pkgs/cache, ce que supprime aussi conda clean --index-cache. Chaque ligne est marquée À vérifier et démarre décochée. Mole ne touche jamais aux paquets extraits ni aux environnements, n’exécute jamais conda et place à la corbeille ce que vous cochez. La suppression des environnements eux-mêmes reste un travail pour conda remove. Pour les autres caches de développement, vider les caches de développement sur Mac passe en revue Xcode, npm et le reste.
FAQ
Est-il sûr de supprimer le dossier pkgs à la main ?
Pas le dossier entier. Les environnements sont liés par lien physique à des fichiers qu’il contient, et conda y attend ses enregistrements. Utilisez conda clean --all, qui ne supprime que ce dont aucun environnement n’a besoin.
Supprimer un environnement efface-t-il mes notebooks et mes données ?
Seuls les fichiers à l’intérieur du dossier de l’environnement disparaissent. Les notebooks, scripts et données de vos dossiers de projet restent, sauf si vous avez créé l’environnement avec --prefix dans le projet et gardé des données dans ce même dossier.
Puis-je supprimer l’environnement base ?
Non. Base contient conda lui-même. Pour tout retirer, désinstallez conda, ce que couvre le guide de désinstallation de Python et Node.
conda clean --all ralentira-t-il ma prochaine installation ?
Légèrement. Conda télécharge de nouveau l’index et récupère les paquets qu’il n’a plus dans le cache. Vos environnements continuent de fonctionner.