diff --git a/installer/Dockerfile b/installer/Dockerfile index 33b5349cec3..d9c05b783eb 100644 --- a/installer/Dockerfile +++ b/installer/Dockerfile @@ -61,6 +61,7 @@ RUN chmod 755 /opt/maxkb/app/installer/run-maxkb.sh && \ cp -f /opt/maxkb/app/installer/run-maxkb.sh /usr/bin/run-maxkb.sh && \ cp -f /opt/maxkb/app/installer/init.sql /docker-entrypoint-initdb.d && \ curl -L --connect-timeout 120 -m 1800 https://resource.fit2cloud.com/maxkb/ffmpeg/get-ffmpeg-linux | sh && \ + python3 /opt/maxkb/app/installer/compile.py && \ mkdir -p /opt/maxkb/app/sandbox/python-packages && \ find /opt/maxkb/app -mindepth 1 -not -name 'sandbox' -exec chmod 700 {} + && \ chmod 755 /tmp && \ diff --git a/installer/compile.py b/installer/compile.py new file mode 100644 index 00000000000..4359c2e8c32 --- /dev/null +++ b/installer/compile.py @@ -0,0 +1,82 @@ +# coding=utf-8 +""" + @project: MaxKB + @Author:虎 + @file: compile.py + @date:2024/12/23 14:11 + @desc: +""" +import os +import sys +import shutil +from py_compile import compile + + +def clean(path_str: str): + for parent, dir_name, filename in os.walk(path_str): + for dir_str in dir_name: + if dir == '__pycache__': + fullname = os.path.join(parent, dir_str) + try: + shutil.rmtree(fullname) + except Exception as e: + print("Can't clean Folder:%s, reason:%s" % (fullname, e)) + + +def compile_pyc(path_str: str): + for parent, dir_name, filename in os.walk(path_str): + for cfile in filename: + fullname = os.path.join(parent, cfile) + if cfile[-3:] == '.py': + try: + if compile(fullname): + if cfile != 'settings.py' and cfile != 'wsgi.py': + os.remove(fullname) # 删除原文件,保留settings.py和wsgi.py + else: + print("Can't compile file:%s,The original file has been retained" % fullname) + except Exception as e: + print("Can't compile file:%s, reason:%s" % (fullname, e)) + + +def move(path_str: str): + for parent, dir_name, filename in os.walk(path_str): + for c_file in filename: + fullname = os.path.join(parent, c_file) + if c_file[-4:] == '.pyc': + try: + if parent.endswith('__pycache__'): + parent_path = os.path.dirname(parent) + shutil.move(fullname, parent_path) + except Exception as e: + print("Can't move file:%s, reason:%s" % (fullname, e)) + + +def replace_name(path_str: str): + for parent, dir_name, filename in os.walk(path_str): + for c_file in filename: + fullname = os.path.join(parent, c_file) + if c_file[-4:] == '.pyc': + try: + cfile_name = '' + cfile_list = c_file.split('.') + version = sys.version_info + replace_name_str = 'cpython-' + str(version[0]) + str(version[1]) + for i in range(len(cfile_list)): + if cfile_list[i] == replace_name_str: + continue + cfile_name += cfile_list[i] + if i == len(cfile_list) - 1: + continue + cfile_name += '.' + shutil.move(fullname, os.path.join(parent, cfile_name)) + except Exception as e: + print("Can't remove file:%s, reason:%s" % (fullname, e)) + + +if __name__ == '__main__': + path = "/opt/maxkb/app/apps" + clean(path) + compile_pyc(path) + move(path) + replace_name(path) + clean(path)