Python Toolchains

pip, Conda, and uv caches: hidden Python storage across projects

Python environments stay fast by caching aggressively. Over time, pip/Conda/uv caches and stale virtual environments can quietly consume large chunks of SSD space.

Updated:

Read time: 7 min

Why this silently grows

Package downloads, extracted wheels, and environment artifacts are reused for speed. On Macs with multiple projects and experiments, the same dependencies are often cached in multiple places, and old virtual environments remain long after repos are archived.

How Free Mac Space finds it

Free Mac Space scans Python-heavy cache roots such as ~/.cache/pip, ~/Library/Caches/pip, ~/miniconda3/pkgs, ~/anaconda3/pkgs, ~/.conda/pkgs, ~/.cache/uv, and ~/.local/share/uv. Results are grouped by path family so you can quickly see whether package caches or environment folders are driving growth.

How cleanup is handled

You can review size, path, and recency before selecting stale cache directories. Cleanup actions remain Trash-first and pass root validation checks so only approved paths are eligible.

Safety boundary

Active virtual environments may still be tied to scheduled jobs or older projects. Keep environments connected to production workflows and remove stale ones in stages.

Paths covered in Free Mac Space

  • ~/.cache/pip
  • ~/Library/Caches/pip
  • ~/miniconda3/pkgs
  • ~/anaconda3/pkgs
  • ~/.conda/pkgs
  • ~/.cache/uv
  • ~/.local/share/uv
  • ~/.virtualenvs

Recommended monthly check

  • Sort by size and remove stale package caches first.
  • Keep environment folders used by active services or notebooks.
  • Re-run the scan to verify reclaimed space and avoid over-cleaning.

Step-by-step workflow

  1. 1. Identify why Python Toolchains storage keeps growing

    Package downloads, extracted wheels, and environment artifacts are reused for speed. On Macs with multiple projects and experiments, the same dependencies are often cached in multiple places, and old virtual environments remain long after repos are archived.

  2. 2. Inspect the highest-impact paths first

    Free Mac Space scans Python-heavy cache roots such as ~/.cache/pip, ~/Library/Caches/pip, ~/miniconda3/pkgs, ~/anaconda3/pkgs, ~/.conda/pkgs, ~/.cache/uv, and ~/.local/share/uv. Results are grouped by path family so you can quickly see whether package caches or environment folders are driving growth. Priority paths: ~/.cache/pip, ~/Library/Caches/pip, ~/miniconda3/pkgs, ~/anaconda3/pkgs, ~/.conda/pkgs, ~/.cache/uv, ~/.local/share/uv, ~/.virtualenvs.

  3. 3. Confirm the safety boundary before acting

    Active virtual environments may still be tied to scheduled jobs or older projects. Keep environments connected to production workflows and remove stale ones in stages.

  4. 4. Apply a review-first cleanup workflow

    You can review size, path, and recency before selecting stale cache directories. Cleanup actions remain Trash-first and pass root validation checks so only approved paths are eligible.

  5. 5. Monthly validation step 1

    Sort by size and remove stale package caches first.

  6. 6. Monthly validation step 2

    Keep environment folders used by active services or notebooks.

  7. 7. Monthly validation step 3

    Re-run the scan to verify reclaimed space and avoid over-cleaning.

Frequently asked questions

  • What hidden storage sources are covered for Python Toolchains?

    Primary sources include pip wheel cache, Conda package cache, uv cache, virtual environment folders. Package downloads, extracted wheels, and environment artifacts are reused for speed. On Macs with multiple projects and experiments, the same dependencies are often cached in multiple places, and old virtual environments remain long after repos are archived.

  • Which macOS paths should I inspect first?

    Start with: ~/.cache/pip, ~/Library/Caches/pip, ~/miniconda3/pkgs, ~/anaconda3/pkgs, ~/.conda/pkgs, ~/.cache/uv, ~/.local/share/uv, ~/.virtualenvs. Free Mac Space scans Python-heavy cache roots such as ~/.cache/pip, ~/Library/Caches/pip, ~/miniconda3/pkgs, ~/anaconda3/pkgs, ~/.conda/pkgs, ~/.cache/uv, and ~/.local/share/uv. Results are grouped by path family so you can quickly see whether package caches or environment folders are driving growth.

  • How can I reduce this storage safely?

    You can review size, path, and recency before selecting stale cache directories. Cleanup actions remain Trash-first and pass root validation checks so only approved paths are eligible. Active virtual environments may still be tied to scheduled jobs or older projects. Keep environments connected to production workflows and remove stale ones in stages.

  • What should the monthly review checklist look like?

    Sort by size and remove stale package caches first. Keep environment folders used by active services or notebooks. Re-run the scan to verify reclaimed space and avoid over-cleaning.

Continue in the matching solution

If you're ready to act, continue in "npm / pnpm / Yarn / Bun cache cleanup" with a step-by-step workflow.

Open matching solution page

More hidden storage cases

Xcode

Xcode DerivedData and DeviceSupport: the classic hidden giant

Xcode can quietly keep tens of gigabytes in build artifacts and simulator/device support files. This post explains where it grows and how to clean without breaking active projects.

Read article

Docker

Docker Desktop VM disk: why it keeps growing after projects end

Docker images, layers, and build cache are stored inside Docker-managed directories and VM disk files. They can grow fast and stay invisible to normal Finder checks.

Read article

Homebrew

Homebrew cache folders: small installs, surprisingly large history

Homebrew keeps download and metadata caches that can survive across upgrades. They are safe cleanup candidates when they become oversized.

Read article