Conda-omgevingen verwijderen op de Mac en ruimte vrijmaken
Na een paar maanden werken met data staan er op een Mac conda-omgevingen waarvan niemand meer weet dat hij ze heeft gemaakt: een per cursus, een per paper, een voor een tool die je één keer probeerde. Elke omgeving heeft zijn eigen Python en pakketten, en samen met de pakketcache van conda kunnen ze tientallen gigabytes innemen. Ze verwijderen kost twee commando's, maar de ruimte komt na het eerste vaak niet terug, en dat komt door de manier waarop conda bestanden tussen omgevingen deelt.
Deze gids laat zien hoe je opsomt wat je hebt, een omgeving op naam of pad verwijdert, waarom het schijfgetal daarna nauwelijks verandert en hoe conda clean de rest teruggeeft. Het geldt voor Anaconda, Miniconda, Miniforge en Mambaforge. Wil je conda zelf weghalen, dan behandelt Python en Node verwijderen op de Mac dat.
Bekijk je omgevingen
conda env list
Dezelfde lijst komt uit conda info --envs. De actieve omgeving heeft een sterretje en elke regel toont de map, meestal ~/miniconda3/envs/<name> of ~/anaconda3/envs/<name>. De regel zonder naam is base, de omgeving waarin conda zelf woont; blijf eraf.
Om te zien hoeveel elke omgeving gebruikt:
conda info --size
Dat geeft het schijfgebruik van conda per omgeving. Heeft jouw versie van conda dit niet, meet dan de mappen rechtstreeks:
du -sh ~/miniconda3/envs/* ~/miniconda3/pkgs
Vervang miniconda3 door anaconda3, miniforge3 of mambaforge, afhankelijk van je installatie.
Bewaar hem voordat je hem verwijdert
Een omgeving die je misschien nog nodig hebt, bewaar je met één klein bestand. Activeer hem en exporteer:
conda activate myenv
conda env export --from-history > myenv.yml
--from-history schrijft alleen de pakketten weg waar je om vroeg, zodat het bestand op een andere Mac of met een nieuwere conda opnieuw kan worden opgebouwd. Voor een byte-exacte herbouw op hetzelfde platform gebruik je in plaats daarvan conda list --explicit > myenv-spec.txt. Elk van beide bestanden haalt de omgeving later terug met conda create --file myenv.yml (of conda env create --file myenv.yml bij oudere versies).
Verwijder een omgeving
Volgens de documentatie van conda mag de omgeving niet actief zijn als je hem verwijdert, dus stap eerst uit:
conda deactivate
conda remove --name myenv --all
conda env remove --name myenv doet hetzelfde. Voeg --dry-run toe om te zien wat er zou verdwijnen zonder iets te verwijderen.
Een omgeving die met --prefix ergens buiten envs is gemaakt, bijvoorbeeld in een projectmap, heeft geen naam die conda kan opzoeken. Verwijder hem dan op pad:
conda remove --prefix ~/projects/thesis/.env --all
De map van een omgeving in de Finder naar de prullenmand slepen geeft dezelfde bestanden vrij, maar het commando is de nettere weg: het werkt ook het eigen register van conda bij, dat conda env list en conda clean lezen.
Waarom de ruimte niet terugkwam
Conda downloadt elk pakket één keer naar zijn pakketcache, pkgs in de installatiemap, en maakt van die bestanden harde koppelingen in elke omgeving die ze gebruikt. De documentatie van conda zegt het zo: omgevingen nemen weinig ruimte in dankzij harde koppelingen. Een harde koppeling is een tweede naam voor dezelfde data op schijf, dus de data blijft staan tot de laatste naam weg is.
Een omgeving verwijderen wist zijn namen. De kopie in pkgs staat er nog, en daarom lijkt du op de installatiemap bijna hetzelfde als eerst. De cache bewaart ook de gedownloade .conda- en .tar.bz2-archieven en de indexbestanden van de kanalen, en geen enkele omgeving heeft die nog nodig zodra een pakket is geïnstalleerd.
Krijg de rest terug met conda clean
Bekijk het eerst:
conda clean --all --dry-run
Voer het daarna uit:
conda clean --all
| Optie | Wat het verwijdert |
|---|---|
-i, --index-cache |
Gedownloade indexbestanden van kanalen; conda haalt ze opnieuw op |
-t, --tarballs |
Pakketarchieven die al in de cache zijn uitgepakt |
-p, --packages |
Uitgepakte pakketten waar geen enkele omgeving naar verwijst |
-c, --tempfiles |
Overgebleven tijdelijke bestanden |
-l, --logfiles |
Logbestanden |
-a, --all |
Alles hierboven |
Eén waarschuwing in de documentatie van conda is het lezen waard voordat je -p gebruikt: het controleert alleen omgevingen die conda info --envs toont. Een omgeving die het niet kent, bijvoorbeeld een omgeving van een andere conda-installatie of een die onder een andere gebruiker is geregistreerd, kan pakketten verliezen waar hij nog naar verwijst. Bewaar je omgevingen buiten de gewone plekken, draai dan eerst conda env list en controleer of ze erin staan.
Laat --force-pkgs-dirs met rust. Het verwijdert elke beschrijfbare pakketcache, hoort bewust niet bij --all en breekt omgevingen die op die bestanden vertrouwen.
Mamba en andere installaties
Mamba accepteert dezelfde commando's: mamba env list, mamba remove --name myenv --all, mamba clean --all. Heb je meer dan één installatie, zeg Anaconda van jaren terug en nu Miniforge, dan heeft elke zijn eigen envs en pkgs; voer het opruimen uit met het conda van elk, of bekijk beide mappen in de Finder voordat je denkt dat de ruimte ergens anders heen is gegaan. CONDA_PKGS_DIRS en CONDA_ENVS_PATH verplaatsen die mappen als ze in je shell zijn ingesteld.
Waar Mole past
Opschonen in Mole zoekt conda-installaties in je thuismap (~/miniconda3, ~/anaconda3, ~/miniforge3, ~/mambaforge en de twee onder ~/opt) en telt er alleen een mee die echte mappen conda-meta en pkgs heeft. Onder Ontwikkeltools staat een groep Conda Cache met twee soorten rijen: pakketarchieven in pkgs waarvan de uitgepakte kopie al klaarstaat en die een dag niet zijn aangeraakt, en de indexmap pkgs/cache, hetzelfde wat conda clean --index-cache verwijdert. Elke rij is gemarkeerd als Controleren en begint uitgevinkt. Mole raakt uitgepakte pakketten en omgevingen nooit aan, draait nooit conda en zet wat jij aanvinkt in de prullenmand. Omgevingen zelf verwijderen blijft een klus voor conda remove. Voor andere ontwikkelcaches loopt ontwikkelcaches wissen op de Mac langs Xcode, npm en de rest.
Veelgestelde vragen
Is het veilig om de map pkgs met de hand te verwijderen?
De hele map niet. Omgevingen zijn met harde koppelingen aan bestanden daarin gekoppeld, en conda verwacht daar zijn registers. Gebruik conda clean --all, dat alleen verwijdert wat geen enkele omgeving nodig heeft.
Verwijdert het verwijderen van een omgeving mijn notebooks en data?
Alleen bestanden in de omgevingsmap gaan weg. Notebooks, scripts en data in je projectmappen blijven staan, tenzij je de omgeving met --prefix in het project hebt gemaakt en data in diezelfde map hebt bewaard.
Kan ik de base-omgeving verwijderen?
Nee. Base bevat conda zelf. Wil je alles kwijt, verwijder dan conda, wat de gids over Python en Node verwijderen behandelt.
Maakt conda clean --all mijn volgende installatie trager?
Een beetje. Conda downloadt de index opnieuw en haalt pakketten op die niet meer in de cache staan. Je omgevingen blijven werken.