agent / backend /clean_pyc.py
Toadied's picture
2312
8b383ad verified
import os
import shutil
from pathlib import Path
# ===================== 配置项(根据需求调整)=====================
# 要清理的根目录(当前项目根目录,可改为绝对路径如:Path("E:/ai/llama3.2-projec/src"))
ROOT_DIR = Path("./src/app")
# 排除的目录(这些目录下的.pyc和__pycache__不删除,如dist目录保留编译后的产物)
EXCLUDE_DIRS = [
Path("./dist"), # 保留编译后的.pyc产物目录
Path("./venv"), # 可选:保留虚拟环境(若有)
Path("./.git"), # 可选:保留git目录
]
# ==================================================================
def is_excluded(path: Path) -> bool:
"""判断路径是否在排除目录中"""
for exclude_dir in EXCLUDE_DIRS:
# 转为绝对路径,避免相对路径判断错误
abs_exclude = exclude_dir.absolute()
abs_path = path.absolute()
if abs_path.is_relative_to(abs_exclude):
return True
return False
def clean_pyc_and_cache():
"""递归删除.pyc文件和__pycache__目录"""
pyc_count = 0 # 统计删除的.pyc文件数
cache_count = 0 # 统计删除的__pycache__目录数
# 递归遍历所有目录和文件
for root in ROOT_DIR.rglob("*"):
# 跳过排除目录
if is_excluded(root):
continue
# 处理__pycache__目录(删除整个目录)
if root.is_dir() and root.name == "__pycache__":
try:
shutil.rmtree(root, ignore_errors=True) # 忽略文件占用错误
cache_count += 1
print(f"🗑️ 删除__pycache__目录:{root.absolute()}")
except Exception as e:
print(f"⚠️ 无法删除__pycache__目录:{root.absolute()} → 错误:{str(e)}")
# 处理.pyc文件(逐个删除)
elif root.is_file() and root.suffix == ".pyc":
try:
root.unlink() # 删除文件
pyc_count += 1
# 可选:打印删除的.pyc文件路径(如需精简,注释掉下面这行)
# print(f"🗑️ 删除.pyc文件:{root.absolute()}")
except Exception as e:
print(f"⚠️ 无法删除.pyc文件:{root.absolute()} → 错误:{str(e)}")
# 输出清理结果
print(f"\n===== 清理完成!=====")
print(f"✅ 共删除 {pyc_count} 个.pyc文件")
print(f"✅ 共删除 {cache_count} 个__pycache__目录")
if __name__ == "__main__":
print(f"===== 开始清理项目中的.pyc文件和__pycache__目录 =====\n🔍 根目录:{ROOT_DIR.absolute()}\n🔍 排除目录:{[d.absolute() for d in EXCLUDE_DIRS]}")
clean_pyc_and_cache()