# main.py - 修复 reload 问题 #!/usr/bin/env python3 """ FastAPI + Tortoise-ORM + Chongming 示例 主入口文件,适配 chongming 打包系统 """ import sys import os from utils.launch import launch from multiprocessing import freeze_support def app_run(app_config: dict, default_config: dict): """ 应用运行函数 - 适配模块银行环境 Args: app_config: 应用配置 default_config: 默认配置 """ import uvicorn import app # 获取服务器配置 server_config = app_config.get("server", {}) host = server_config.get("host", "0.0.0.0") port = server_config.get("port", 8000) # 打包环境强制禁用重载 is_frozen = getattr(sys, 'frozen', False) reload = False if is_frozen else server_config.get("reload", False) workers = server_config.get("workers", 4) # 显示启动信息 env = app_config.get("env", "development") print("=" * 50) print(f"🚀 启动 {default_config.get('app.name', 'FastAPI 应用')}") print(f"📦 版本: {default_config.get('app.version', '1.0.0')}") print(f"🌍 环境: {env}") print(f"📍 地址: http://{host}:{port}") print(f"📚 文档: http://{host}:{port}/docs") print(f"🔧 调试: {'启用' if app_config.get('debug', False) else '禁用'}") print(f"🔄 重载: {'启用' if reload else '禁用'}") print(f"👥 Workers: {workers}") print("=" * 50) # 关键修改:根据 reload 模式选择不同的启动方式 uvicorn.run( "app:app", host=host, port=port, reload=reload, workers=workers, log_level="debug" if app_config.get("debug", False) else "info", access_log=True, ) if __name__ == "__main__": freeze_support() # 如果是打包后的可执行文件,调整路径 if getattr(sys, 'frozen', False): exe_dir = os.path.dirname(sys.executable) if exe_dir not in sys.path: sys.path.insert(0, exe_dir) # 启动应用 launch(app_run, "development")