uv缓存占满58GB需手动清理:先用find查90天未修改的废弃环境,再重命名备份后删旧目录;pip用cache purge清空,pipx用uninstall卸载不用工具;可设定时脚本自动清理。

uv 包管理器缓存占满 58GB 怎么办
uv 的 ~/.cache/uv/archive-v0 目录会为每个虚拟环境生成独立子目录,352 个环境占 58GB 是典型现象。它不会自动清理旧环境,也不受系统存储管理工具识别——必须手动干预。
关键判断:这些缓存文件夹里只有 pyvenv.cfg 和 CACHEDIR.TAG 是标记文件,其余全是可重建的 Python 环境副本,只要没在用,删掉完全不影响当前项目。
- 运行
uv python list查看当前已安装的 Python 版本,确认你实际在用哪些(比如cpython-3.11.13) - 用
find ~/.cache/uv/archive-v0 -name "pyvenv.cfg" -mtime +90找出 90 天未修改的环境配置——这类基本是废弃的 - 别直接
rm -rf ~/.cache/uv/archive-v0,先批量重命名测试:mkdir -p ~/.cache/uv/archive-v0.backup && mv ~/.cache/uv/archive-v0 ~/.cache/uv/archive-v0.backup,再挑几个旧目录删掉验证是否影响开发流程
pip 和 pipx 缓存怎么安全清空
pip 默认缓存路径是 ~/Library/Caches/pip,pipx 是 ~/.local/share/pipx/venvs 和 ~/.local/share/pipx/installed_packages。它们不像 uv 那样按随机哈希分目录,但长期不用的包或旧版本虚拟环境一样堆积空间。
-
pip cache info查看当前缓存大小和位置;pip cache purge可一键清空全部(注意:下次pip install会变慢,但无功能影响) -
pipx list列出所有已安装 CLI 工具;对不再使用的,执行pipx uninstall xxx,它会连带删除对应 venv 和缓存 - 如果想保留某些包但清理旧版本残留,进
~/.local/share/pipx/venvs/按修改时间排序,只删掉名称含-old或明显过时的目录(如poetry-1.4.2而你已在用poetry-1.7.1)
写个定时脚本自动清理 uv + pip 缓存
手动查、删、验证太费时间,尤其当你频繁试用新 Python 工具链时。一个轻量级 cron 脚本能解决重复劳动,且避免误删正在使用的环境。
把下面内容保存为 ~/bin/clean-py-cache.sh,然后 chmod +x ~/bin/clean-py-cache.sh:
#!/bin/bash
# 只清理 60 天前未访问的 uv 环境
find "$HOME/.cache/uv/archive-v0" -type d -name "pyvenv.cfg" -mtime +60 -exec dirname {} \; | xargs -I{} rm -rf {}
<h1>清空 pip 缓存(仅当超过 2GB 时)</h1><p>if [ $(pip cache info | awk '/Size:/ {print $2}' | sed 's/G//') -gt 2 ]; then
pip cache purge
fi- 加入
crontab -e:添加一行0 3 * * 0 ~/bin/clean-py-cache.sh >/dev/null 2>&1,表示每周日凌晨 3 点执行 - 脚本不碰
~/.local/share/uv/python/下的 Python 安装本身,那是运行时依赖,删了会导致uv run报错 - 首次运行前建议加
echo替代rm -rf做 dry-run,比如把rm -rf {}改成echo "would remove: {}"
为什么系统自带“存储管理”对这些缓存完全无效
macOS 的“存储管理”只扫描已知模式的系统级冗余数据,比如 ~/Library/Mail/Downloads、~/Movies/iTunes Media/Previous iTunes Libraries 这类 Apple 自己定义的路径。而 uv、pipx、poetry 等工具的缓存都藏在用户自定义路径下,且目录结构动态生成,系统根本无法识别其用途。
更麻烦的是,有些工具(比如早期 uv 版本)会在 pyvenv.cfg 里写死绝对路径,导致即使你迁移了项目,缓存仍被当作“活跃”状态。所以不能依赖图形界面工具,必须直面路径和时间戳。
真正省事的做法不是找“一键清理”,而是从源头控制:用 uv sync --no-cache 临时跳过缓存,或在 CI/CD 脚本里加 uv cache clean(新版本 uv 已支持该命令,但需 ≥0.8.0)。

















