import importlib import pkgutil from pathlib import Path from fastapi import APIRouter from uvicorn.server import logger # 定义一个 APIRouter 实例 router = APIRouter() # 初始化 __all__ 列表,用于声明模块公开的对象 __all__ = [] # 获取当前文件所在目录 current_dir = Path(__file__).parent # 定义可能的路由变量名列表 ROUTER_VARIABLE_NAMES = ["router", "routes", "api_router"] # 遍历当前目录下的所有 .py 文件 for module_info in pkgutil.iter_modules([str(current_dir)]): if module_info.name != Path(__file__).stem: # 排除当前文件 module = importlib.import_module(f".{module_info.name}", package=__package__) found_router = False # 遍历可能的路由变量名 for var_name in ROUTER_VARIABLE_NAMES: if hasattr(module, var_name): module_router: APIRouter = getattr(module, var_name) api_number = len(module_router.routes) logger.info( f"[导入路由] 已导入模块: {module_info.name}.{var_name} 共计{api_number}个接口 ✅" ) # 自动创建别名,使用模块名和变量名组合作为别名 alias_name = f"{module_info.name}_{var_name}" globals()[alias_name] = module_router # 包含模块的 router 到主 router 中 router.include_router( router=module_router, tags=[f"{alias_name} api"], ) # 将别名添加到 __all__ 列表中 __all__.append(alias_name) found_router = True if not found_router: logger.error( f"[导入路由] 未导入模块:{module_info.name},未找到以下任一变量: {', '.join(ROUTER_VARIABLE_NAMES)} " )