conda-Umgebungen auf dem Mac löschen und Speicherplatz freigeben
Ein paar Monate Datenarbeit hinterlassen auf einem Mac conda-Umgebungen, an deren Anlegen sich niemand erinnert: eine pro Kurs, eine pro Paper, eine für ein Werkzeug, das man einmal ausprobiert hat. Jede enthält ihr eigenes Python und ihre eigenen Pakete, und zusammen mit dem Paket-Cache von conda können sie zig Gigabyte belegen. Sie zu entfernen sind zwei Befehle, aber der Speicherplatz kommt nach dem ersten oft nicht zurück, und der Grund liegt darin, wie conda Dateien zwischen Umgebungen teilt.
Diese Anleitung zeigt, wie Sie vorhandene Umgebungen auflisten, eine Umgebung über Namen oder Pfad entfernen, warum die Anzeige des Speicherplatzes sich danach kaum ändert und wie conda clean den Rest zurückholt. Sie gilt gleichermaßen für Anaconda, Miniconda, Miniforge und Mambaforge. Wie Sie conda selbst entfernen, behandelt Python und Node auf dem Mac deinstallieren.
Umgebungen auflisten
conda env list
Dieselbe Liste liefert conda info --envs. Die aktive Umgebung trägt ein Sternchen, und jede Zeile zeigt ihren Ordner, meist ~/miniconda3/envs/<name> oder ~/anaconda3/envs/<name>. Die Zeile ohne Namen ist base, die Umgebung, in der conda selbst liegt; lassen Sie sie in Ruhe.
So sehen Sie, wie viel jede einzelne belegt:
conda info --size
Das zeigt den Speicherverbrauch von conda pro Umgebung. Hat Ihre conda-Version das nicht, messen Sie die Ordner direkt:
du -sh ~/miniconda3/envs/* ~/miniconda3/pkgs
Ersetzen Sie miniconda3 durch anaconda3, miniforge3 oder mambaforge, passend zu Ihrer Installation.
Vor dem Entfernen sichern
Eine Umgebung, die Sie vielleicht wieder brauchen, lässt sich mit einer kleinen Datei aufbewahren. Aktivieren Sie sie und exportieren Sie:
conda activate myenv
conda env export --from-history > myenv.yml
--from-history schreibt nur die Pakete, die Sie ausdrücklich angefordert haben, sodass sich die Datei auf einem anderen Mac oder mit einem neueren conda neu aufbauen lässt. Für einen bytegenauen Neuaufbau auf derselben Plattform nehmen Sie stattdessen conda list --explicit > myenv-spec.txt. Mit beiden Dateien holen Sie die Umgebung später mit conda create --file myenv.yml zurück (bei älteren Versionen mit conda env create --file myenv.yml).
Eine Umgebung entfernen
Laut conda-Dokumentation darf die Umgebung beim Entfernen nicht aktiv sein, verlassen Sie sie also zuerst:
conda deactivate
conda remove --name myenv --all
conda env remove --name myenv tut dasselbe. Mit --dry-run sehen Sie, was entfernt würde, ohne etwas zu entfernen.
Eine Umgebung, die mit --prefix außerhalb von envs angelegt wurde, etwa in einem Projektordner, hat keinen Namen, den conda nachschlagen kann. Entfernen Sie sie über den Pfad:
conda remove --prefix ~/projects/thesis/.env --all
Den Umgebungsordner im Finder in den Papierkorb zu legen gibt dieselben Dateien frei, aber der Befehl ist der sauberere Weg: Er aktualisiert auch condas eigene Liste der Umgebungen, die conda env list und conda clean lesen.
Warum der Speicherplatz nicht zurückkam
Conda lädt jedes Paket einmal in seinen Paket-Cache, den Ordner pkgs im Installationsordner, und verknüpft diese Dateien dann per Hardlink mit jeder Umgebung, die sie nutzt. In der conda-Dokumentation heißt es sinngemäß: Umgebungen brauchen dank Hardlinks wenig Platz. Ein Hardlink ist ein zweiter Name für dieselben Daten auf dem Datenträger, die Daten bleiben also, bis der letzte Name verschwunden ist.
Das Entfernen einer Umgebung löscht ihre Namen. Die Kopie in pkgs ist weiterhin da, deshalb sieht du auf dem Installationsordner fast so aus wie zuvor. Der Cache behält außerdem die heruntergeladenen Archive (.conda und .tar.bz2) und die Index-Dateien der Kanäle, die keine Umgebung mehr braucht, sobald ein Paket installiert ist.
Den Rest mit conda clean zurückholen
Zuerst eine Vorschau:
conda clean --all --dry-run
Dann ausführen:
conda clean --all
| Option | Was sie entfernt |
|---|---|
-i, --index-cache |
Heruntergeladene Index-Dateien der Kanäle; conda lädt sie erneut |
-t, --tarballs |
Paketarchive, die bereits in den Cache entpackt wurden |
-p, --packages |
Entpackte Pakete, mit denen keine Umgebung verknüpft ist |
-c, --tempfiles |
Übrig gebliebene temporäre Dateien |
-l, --logfiles |
Protokolldateien |
-a, --all |
Alles oben Genannte |
Eine Warnung aus der conda-Dokumentation sollten Sie vor -p lesen: Der Befehl prüft nur Umgebungen, die conda info --envs auflistet. Eine Umgebung, die er nicht kennt, etwa von einer anderen conda-Installation oder unter einem anderen Benutzer registriert, kann Pakete verlieren, mit denen sie noch verknüpft ist. Wenn Sie Umgebungen außerhalb der üblichen Orte haben, führen Sie zuerst conda env list aus und prüfen Sie, dass sie dort erscheinen.
Lassen Sie --force-pkgs-dirs weg. Es löscht jeden beschreibbaren Paket-Cache, ist bewusst nicht Teil von --all und zerstört Umgebungen, die auf diese Dateien angewiesen sind.
Mamba und andere Installationen
Mamba akzeptiert dieselben Befehle: mamba env list, mamba remove --name myenv --all, mamba clean --all. Haben Sie mehr als einen Installer, etwa Anaconda von vor Jahren und jetzt Miniforge, hat jeder seine eigenen Ordner envs und pkgs; führen Sie die Bereinigung mit dem jeweiligen conda aus oder sehen Sie in beiden Ordnern im Finder nach, bevor Sie annehmen, der Platz sei woanders hin verschwunden. CONDA_PKGS_DIRS und CONDA_ENVS_PATH verschieben diese Ordner, wenn sie in Ihrer Shell gesetzt sind.
Wo Mole hilft
Bereinigen in Mole sucht in Ihrem Benutzerordner nach conda-Installationen (~/miniconda3, ~/anaconda3, ~/miniforge3, ~/mambaforge und die beiden unter ~/opt) und zählt nur eine, die echte Ordner conda-meta und pkgs hat. Unter Entwicklerwerkzeuge erscheint eine Gruppe Conda Cache mit zwei Arten von Zeilen: Paketarchive in pkgs, deren entpackte Kopie bereits vorhanden ist und die seit einem Tag unberührt sind, sowie der Index-Ordner pkgs/cache, also das, was auch conda clean --index-cache entfernt. Jede Zeile ist mit Prüfen markiert und beginnt abgewählt. Mole berührt weder entpackte Pakete noch Umgebungen, führt nie conda aus und legt das, was Sie ankreuzen, in den Papierkorb. Die Umgebungen selbst zu entfernen bleibt Aufgabe von conda remove. Zu anderen Entwickler-Caches führt Entwickler-Caches auf dem Mac leeren durch Xcode, npm und den Rest.
Häufige Fragen
Ist es sicher, den Ordner pkgs von Hand zu löschen?
Nicht den ganzen Ordner. Umgebungen sind per Hardlink mit Dateien darin verknüpft, und conda erwartet dort seine Einträge. Nehmen Sie conda clean --all, das nur entfernt, was keine Umgebung braucht.
Löscht das Entfernen einer Umgebung meine Notebooks und Daten?
Nur Dateien im Umgebungsordner verschwinden. Notebooks, Skripte und Daten in Ihren Projektordnern bleiben erhalten, es sei denn, Sie haben die Umgebung mit --prefix im Projekt angelegt und Daten im selben Ordner abgelegt.
Kann ich die Umgebung base entfernen?
Nein. Base enthält conda selbst. Um alles loszuwerden, deinstallieren Sie conda, wie es die Anleitung zum Deinstallieren von Python und Node beschreibt.
Macht conda clean --all meine nächste Installation langsamer?
Etwas. Conda lädt den Index erneut und holt Pakete, die nicht mehr im Cache liegen. Ihre Umgebungen funktionieren weiter.