pip uninstall后磁盘空间不减少,是因为它只移除顶层模块和入口脚本,而残留的.dist-info目录、__pycache__、二进制扩展文件及--user安装副本未被自动清除。

卸载 Python 包后磁盘空间没变,不是 pip 没删干净,而是 site-packages 里残留了已卸载包的缓存目录、.dist-info 文件夹、甚至未被清理的 __pycache__ 和编译产物 —— 这些文件不会随 pip uninstall 自动清除。
为什么 pip uninstall 后磁盘空间不减少
pip 卸载只移除包的顶层模块和入口脚本,但以下内容常被跳过:
-
.dist-info目录(如requests-2.31.0.dist-info/)可能残留,尤其当包是通过pip install -e .或 wheel 安装时 -
__pycache__里的 .pyc 文件不会自动删除,哪怕对应 .py 已不存在 - 某些包(如
numpy、torch)安装时会生成大量二进制扩展(.so/.dylib/.dll),卸载后这些文件有时卡在site-packages子目录里 - 如果曾运行过
pip install --user,卸载时默认只操作当前 venv,而--user安装的副本仍留在~/.local/lib/python*/site-packages/
如何确认 site-packages 里到底剩了什么
别靠肉眼扫,用命令定位“疑似已卸载但文件还在”的痕迹:
- 查残留的
.dist-info:进入 venv 的lib/python*/site-packages/,运行find . -name "*.dist-info" -maxdepth 1 | xargs basename | sed 's/\.dist-info$//' | sort | comm -23 - (Linux/macOS) - 查孤立的
__pycache__:运行find . -name "__pycache__" -type d -empty -delete 2>/dev/null; find . -name "__pycache__" -type d,后者列出非空缓存目录 - 查大体积二进制文件:
du -sh */*.so */*.dylib */*.dll 2>/dev/null | sort -hr | head -10
安全清理 site-packages 的三步实操
手动删前先停掉所有引用该 venv 的进程(lsof +D /path/to/venv),再执行:
立即学习“Python免费学习笔记(深入)”;
- 清空所有
__pycache__:find /path/to/venv/lib/python*/site-packages -name "__pycache__" -type d -exec rm -rf {} + - 删掉已卸载包的
.dist-info和对应模块目录(必须成对删):pip show package_name看Location:,再进该路径手动rm -rf package_name* *.dist-info - 删掉无主的 wheel 缓存(venv 内部):
rm -rf /path/to/venv/share/wheels/ /path/to/venv/pip-wheel-metadata/(若存在)
更省事但需谨慎的替代方案
如果这个 venv 已不再需要,直接删整个目录比逐个清理更可靠:
- 确认没进程占用:
lsof +D /path/to/venv 2>/dev/null | grep -q "." || echo "safe to delete" - 确认解释器失效:
/path/to/venv/bin/python -c "import sys; print(sys.executable)"若报错或路径指向已删的系统 Python,说明可删 - 删完后,用
pip cache purge清全局 pip 缓存(它不占 venv 空间,但常被误认为是 venv 残留)
真正难清理的从来不是包本身,而是那些没被 pip uninstall 覆盖到的元数据和缓存结构 —— 尤其当 venv 经历过多次 pip install -e、交叉编译或 IDE 自动注入后,site-packages 很容易变成“文件墓地”。动手前务必确认 venv 是否仍在被引用,否则删完可能让某个后台服务突然崩溃。



















