71 lines
2.1 KiB
Python
Executable File
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()) |