功能
Python 代码在打包发给用户之前需要删除 pyc/pyo 文件,如果在模块未执行之前可以通过设置环境变量 PYTHONUNBUFFERED=1
来阻止生成上述文件,
但若已经生成就需要一个简单的脚本统一删除了。
删除前:
删除后:
代码
import shutil
import os
def remove_cache(root):
for child in os.listdir(root):
child_root = os.path.join(root, child)
if os.path.isdir(child_root):
# Python3 会生成 __pycache__ 文件夹,因此直接删除整个文件夹即可
if child == '__pycache__':
print(f'remove {child_root}')
shutil.rmtree(child_root)
# 非 __pycache__ 文件夹则递归搜索子目录
else:
remove_cache(child_root)
elif os.path.isfile(child_root):
# 匹配后缀 pyc/pyo
if child.endswith(('.pyc', '.pyo')):
py_path = os.path.join(root, child.rsplit('.', 1)[0] + '.py')
# 如果匹配到的 pyc/pyo 文件有对应的 py 文件,则删除 pyc/pyo
# 这里的判断主要是避免部分特殊的 package 只发布 pyc文件导致误删除的情况发生
if os.path.isfile(py_path):
print(f'remove {child_root} because {py_path} exists')
os.remove(child_root)
if __name__ == '__main__':
import sys
path_need_to_remove = sys.argv[1]
remove_cache(path_need_to_remove)