如何删除目录树中的所有 __pycache__ 文件夹

max*_*chl 2 python

在我的模拟过程中,Python 创建了名为__pycache__. 不止一个,而是很多。- 文件__pycache__夹几乎总是在执行的模块旁边创建。

但是这些模块分散在我的目录中。主文件夹被调用LPG并有很多子文件夹,这些子文件夹又包含更多的子文件夹。- 文件__pycache__夹可以出现在所有可能的位置。

在我的模拟结束时,我想清理并删除名为所有文件夹__pycache__的内LPG-树。

做这个的最好方式是什么?

目前,我在模拟结束时(也在模拟开始时)调用下面的函数。但是,这有点烦人,因为我必须特别写下__pycache__可能出现 -folder 的每个路径。

def clearCache():
    """
    Removes generic `__pycache__` .

    The `__pycache__` files are automatically created by python during the simulation.
    This function removes the generic files on simulation start and simulation end.
    """
    try:
        shutil.rmtree(Path(f"{PATH_to_folder_X}/__pycache__"))
    except:
        pass

    try:
        shutil.rmtree(Path(f"{PATH_to_folder_Y}/__pycache__"))
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

Sha*_*ger 5

这里有一个框架挑战:如果您不想要字节码缓存,最好的解决方案是首先不生成它们。如果你每次运行后总是删除它们,它们比没用更糟糕。任何一个:

  1. 使用选项调用python/ (影响单次启动),或...python3-B
  2. 设置PYTHONDONTWRITEBYTECODE环境变量以影响所有 Python 启动,直到它被取消设置,例如在bashexport PYTHONDONTWRITEBYTECODE=1

这确实需要在 Python 脚本启动之前进行设置,因此也许可以用一个简单的bash脚本或类似的脚本来包装您的脚本,以通过适当的开关/环境设置调用真正的 Python 脚本。


Mil*_*vić 5

这将递归删除当前目录中的所有 *.pyc 文件和pycache目录:

  • 使用蟒蛇:
import os

os.popen('find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf')
Run Code Online (Sandbox Code Playgroud)
  • 或使用终端或 cmd 手动:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)