Remove/Clean pycache Folders

2024-07-23, by Kimi and Deepseek

难度: 1

时长: 15 min

这个知识点了解一下,且必须了解,有助于调试排错

__pycache__ 是什么?

  • 它是 Python 解释器为了加速模块加载而自动创建的目录。

  • 里面存放的是已编译的字节码(.pyc 文件)。当你第一次导入一个模块(如 import my_module)时,Python 会将你的 .py 源代码编译成字节码,并保存到 __pycache__ 目录中。

  • 下次再导入同一个模块时,如果源代码(.py 文件)没有修改,Python 就会直接加载这个预编译的字节码,从而跳过编译步骤,大大加快启动速度。


何时需要删除 __pycache__

虽然通常不需要干预,但在以下情况下,手动删除它是一个好主意:

1. 部署项目到生产环境或分发代码时

这是最重要的场景。你不想将 __pycache__ 部署到服务器或打包进你的发行版中。

  • 原因:

    • 冗余:生产环境可以在需要时自己生成这些文件。

    • 潜在问题:如果你在 Python 3.8 下开发,生成了 __pycache__/mymodule.cpython-38.pyc,但生产服务器是 Python 3.9,它可能会因为版本不匹配而忽略这些缓存文件,但最坏的情况下,旧的缓存文件可能导致难以调试的行为。

    • 整洁性:使部署包更小、更干净。

最佳实践:使用 .gitignore(对于 Git)或 .dockerignore(对于 Docker)等工具在源头上忽略它们,而不是在部署前手动删除。

# .gitignore

*.pyc
__pycache__

2. 调试棘手的问题时

当你遇到一些“诡异”的问题,比如代码行为与预期不符,似乎修改的代码没有生效时。

  • 原因:有时 Python 可能没有正确检测到源文件的更改,仍然加载了旧的字节码。这在使用 rsync 或某些编辑器修改文件后可能会发生。删除 __pycache__ 强制 Python 在下一次导入时重新编译所有模块,可以确保你运行的是最新的代码。

3. 切换 Python 版本后

如果你在同一个项目目录中切换了不同的 Python 解释器(例如,从 Python 3.8 切换到 3.11)。

  • 原因:不同版本的 Python 会生成不同版本的字节码文件(如 cpython-38.pyccpython-311.pyc)。旧的缓存文件不会被使用,只是白白占用空间。删除它们可以保持项目目录的整洁。

4. 重构或重命名了大量文件后

如果你删除或重命名了很多 .py 文件。

  • 原因:对应的 .pyc 文件会留在 __pycache__ 中,成为“孤儿文件”。它们不再被使用,但会残留下来。此时清理一下是个好习惯。

5. 清理磁盘空间或准备归档项目时

虽然单个 .pyc 文件很小,但在大型项目中,成千上万个这样的文件会占用可观的磁盘空间。在归档或备份项目前,删除它们可以减小体积。

如何快速删除 __pycache__ 目录?

  1. 手动删除

    • 打开 PyCharm 项目,找到 __pycache__ 目录。

    • 右键点击该目录,选择“Delete”进行删除。

  2. 使用 PyCharm 的终端

    • 打开 PyCharm 的终端(Terminal)。

    • 使用 rm(Linux/macOS)或 rmdir/del(Windows)命令删除 __pycache__ 目录。例如:

      • 在 Linux/macOS 中:rm -rf __pycache__

      • 在 Windows 中:rmdir /s /q __pycache__

  3. 使用 PyCharm 的“Rerun”功能

    • 有时候,PyCharm 会在你重新运行项目时自动清理 __pycache__ 目录。

  4. 使用 PyCharm 的“Clean Project”功能

    • 右键点击项目根目录,选择“Refactor”(重构)。

    • 然后选择“Clean...”(清理...)。

    • 在弹出的对话框中,选择要清理的项目,通常包括编译文件、缓存文件等。

  5. 使用 PyCharm 的“File Watchers”

    • 设置一个 File Watcher 来监控项目目录,当检测到 __pycache__ 目录时自动删除。

  6. 使用 PyCharm 插件

    • 有些 PyCharm 插件可以帮助自动删除 __pycache__ 目录。

  7. 使用外部脚本或工具

    • 编写一个外部脚本或使用其他工具,在 PyCharm 外部删除 __pycache__ 目录。