import sys from .config import ConfigLoader import argparse import os from module_bank import PythonToSQLite from typing import Callable # 检查是否在 PyInstaller 子进程中 def is_pyinstaller_child(): return len(sys.argv) > 1 and ("_child.py" in sys.argv[0] or sys.argv[1].isdigit()) def parse_args(): """安全的参数解析函数""" if is_pyinstaller_child(): # PyInstaller 子进程,使用默认参数 return argparse.Namespace(config="config.toml") parser = argparse.ArgumentParser( description="{{ cookiecutter.project_name }} 应用启动脚本" ) parser.add_argument("--config", default="config.toml", help="配置文件路径") return parser.parse_args() args = parse_args() def init_module_bank(config): MODULE_BANK_PATH_LIST = config["production"]["module_system"]["path"] for module_path in MODULE_BANK_PATH_LIST: if os.path.exists(module_path) == False: raise ValueError(f"模块路径不存在: {module_path}") packer_list = [PythonToSQLite(module_path) for module_path in MODULE_BANK_PATH_LIST] for packer in packer_list: modules = packer.list_modules() for module in modules: print(f"{module['module_name']} {'[包]' if module['is_package'] else ''}") packer.install_importer() def launch(run_fun: Callable[[dict, dict], None], run_mode: str): config = ConfigLoader(args.config) # 获取对应运行模式的配置 default_config = config.get("default", {}) run_mode = default_config.get("env", "development") app_config = config.get(run_mode, {}) if run_mode == "production": init_module_bank(config) run_fun(app_config, default_config)