#!/usr/bin/env python3 """ 依赖检查脚本 - 在应用启动前检查所有必要依赖是否已正确安装 """ import importlib import sys import logging # 配置日志 logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) logger = logging.getLogger("依赖检查") # 定义必要的依赖列表 REQUIRED_PACKAGES = [ ("fastapi", "FastAPI框架"), ("uvicorn", "ASGI服务器"), ("sqlalchemy", "ORM数据库框架"), ("alembic", "数据库迁移工具"), ("pymysql", "MySQL驱动"), ("dashscope", "阿里云DashScope SDK"), ("qcloud_cos", "腾讯云COS SDK"), ("qcloud_python_sts", "腾讯云STS SDK", ["qcloud_python_sts.sts", "sts.sts"]), ("dotenv", "环境变量处理", ["dotenv", "python_dotenv"]), ] def check_dependency(package_name, description, import_names=None): """检查依赖是否已安装""" if import_names is None: import_names = [package_name] for import_name in import_names: try: importlib.import_module(import_name) logger.info(f"✅ {description} ({package_name}) 已安装") return True except ImportError: continue logger.error(f"❌ {description} ({package_name}) 未安装或无法导入") return False def main(): """检查所有依赖""" logger.info("开始检查依赖...") all_dependencies_ok = True for package_info in REQUIRED_PACKAGES: if len(package_info) == 2: package_name, description = package_info import_names = None else: package_name, description, import_names = package_info if not check_dependency(package_name, description, import_names): all_dependencies_ok = False if all_dependencies_ok: logger.info("所有依赖检查通过 ✓") return 0 else: logger.error("存在未安装或无法导入的依赖,请安装后再试") logger.error("可以运行 pip install -r requirements.txt 安装所有依赖") return 1 if __name__ == "__main__": sys.exit(main())