可放心删除的缓存包括__pycache__、.pytest_cache、.mypy_cache、.ruff_cache四类,它们均为编译或运行时中间态,删除后仅影响下次执行速度,不损数据或功能;其他如node_modules、dist、.venv等不属于python项目自身缓存,需单独处理。

直接删 __pycache__ 和 .pytest_cache 是安全的,但盲目递归清理整个项目目录下的所有缓存文件可能误删构建产物或配置快照。关键不是“能不能删”,而是“删哪些、什么时候删、怎么避免下次再堆”。
哪些缓存文件可以放心删
Python 项目中真正可无损清理的缓存,集中在编译中间态和测试运行时生成物两类:
-
__pycache__目录:每个 Python 源文件编译后生成的字节码缓存,删除后首次运行会重新生成,不影响逻辑 -
.pytest_cache:pytest 运行时记录测试状态的目录,删掉只会让下一次运行变慢一点,不丢数据 -
.mypy_cache:mypy 类型检查的缓存,删后类型检查耗时略增,但结果不变 -
.ruff_cache(v0.5+):Ruff 格式化/检查的缓存,非持久性,可删
注意:node_modules/.cache、dist/、build/、.venv/.pip_cache 不属于 Python 项目自身缓存,它们是构建工具或依赖管理器生成的,需单独处理。
用 find + rm 在 Linux/macOS 上精准清理
别用 rm -rf * 或通配符暴力清,容易误伤 .git、pyproject.toml 等隐藏文件。推荐用 find 定向扫描:
find . -type d \( -name "__pycache__" -o -name ".pytest_cache" -o -name ".mypy_cache" -o -name ".ruff_cache" \) -exec rm -rf {} +
说明:
-
-type d只匹配目录,避免误删同名文件 -
\( ... \)是分组语法,括号必须转义 -
-exec rm -rf {} +批量执行,比\;更高效 - 加
echo前缀可先预览:find ... -exec echo {} \;
Windows 下用 PowerShell 安全清理
PowerShell 比 cmd 更可靠,能正确处理路径空格和 Unicode:
Get-ChildItem -Path . -Recurse -Directory | Where-Object { $_.Name -in @("__pycache__", ".pytest_cache", ".mypy_cache", ".ruff_cache") } | ForEach-Object { Remove-Item $_.FullName -Recurse -Force }
常见坑点:
- 不要用
del /s /q,它不区分目录和文件,且对隐藏目录支持差 - PowerShell 默认不递归搜索隐藏项,
Get-ChildItem的-Force参数才可见.xxx目录 - 如果项目用了 Poetry 或 Hatch,它们的缓存(如
.venv/.poetry)不在上述列表里,不能一并删
为什么不能靠 IDE 自带的“清理项目”功能
PyCharm 的 Clean Project 或 VS Code 的 Python 扩展“刷新 Pylance 缓存”,只清理自身工作区元数据(比如索引、语言服务器状态),不碰 __pycache__ 或测试缓存。更关键的是:
- 它们不识别自定义缓存目录(如你手动在
src/下建的.cache) - 不跨工具协同:pytest 清了
.pytest_cache,但 mypy 的.mypy_cache还在 - 没提供白名单机制,无法排除某些子模块下的缓存(比如你故意保留
tests/integration/.pytest_cache加速回归)
真正可控的清理,永远建立在明确知道每个缓存的生命周期和归属工具的基础上——删之前,先确认它是谁写的、谁读的、删了影响谁。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











