#!/usr/bin/env python # -*- coding: utf8 -*- import os import py_compile import shutil import sys import time import platform from . import colorconsole as cc from . import utils rm_file_every_level = ['.pyc', '.pyo'] PY_VER = platform.python_version_tuple() cpython_mid_name = 'cpython-{}{}'.format(PY_VER[0], PY_VER[1]) def make(tmp_path): cc.v('Remove all old .pyc/.pyo files...') clean_folder(tmp_path) time.sleep(0.5) cc.v('Compile all .py into .pyo...') compile_files(tmp_path) time.sleep(0.5) cc.v('Remove all .py files...') fix_pyo(tmp_path) time.sleep(0.5) cc.v('Remove all `__pycache__` folders...') remove_cache(tmp_path) def clean_folder(path): for parent, dir_list, file_list in os.walk(path): for d in dir_list: clean_folder(os.path.join(parent, d)) for filename in file_list: _, ext = os.path.splitext(filename) if ext in rm_file_every_level: os.remove(os.path.join(parent, filename)) def remove_cache(path): for parent, dir_list, file_list in os.walk(path): for d in dir_list: d = d.lower() if d == '__pycache__': utils.remove(os.path.join(parent, d)) continue remove_cache(os.path.join(parent, d)) def compile_files(path): for parent, dir_list, file_list in os.walk(path): for d in dir_list: compile_files(os.path.join(parent, d)) for filename in file_list: n, ext = os.path.splitext(filename) # fileNameSplitList = filename.split(".") # ext = fileNameSplitList[len(fileNameSplitList) - 1].lower() if ext == '.py': py_compile.compile(os.path.join(parent, filename), os.path.join(parent, n)+'.pyc', optimize=2) # py_compile.compile(os.path.join(parent, filename), optimize=2) def fix_pyo(path): for parent, dir_list, file_list in os.walk(path): for d in dir_list: fix_pyo(os.path.join(parent, d)) for filename in file_list: _, ext = os.path.splitext(filename) if ext.lower() == '.py': os.remove(os.path.join(parent, filename)) # names = filename.split(".") # ext = names[len(names) - 1].lower() # if ext.lower() == '.py': # os.remove(os.path.join(parent, filename)) # elif ext == 'pyo': # cpython = names[len(names) - 2].lower() # if cpython == cpython_mid_name: # del names[len(names) - 2] # else: # continue # t_name = os.path.abspath(os.path.join(parent, '..', '.'.join(names))) # f_name = os.path.join(parent, filename) # shutil.copy(f_name, t_name) if __name__ == '__main__': make(sys.argv[1])