aidress/check_dependencies.py
2025-03-21 23:02:15 +08:00

71 lines
2.1 KiB
Python
Executable File

#!/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())