初始化代码

This commit is contained in:
wzy-warehouse
2026-05-08 15:42:32 +08:00
parent 7d18effcfe
commit 4ef23fec7c
26 changed files with 140 additions and 2263 deletions
+25 -207
View File
@@ -1,230 +1,48 @@
"""
项目启动脚本 - 支持多环境和跨平台
使用 Dynaconf 进行环境隔离配置
"""
import sys
import subprocess
import os
import platform
from pathlib import Path
from app.utils.logger import get_logger
# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
logger = get_logger()
def check_platform():
"""测平台信息"""
print("=" * 60)
print(" 系统信息检测")
print("=" * 60)
from app.utils.platform_utils import platform_detector
platform_detector.print_platform_banner()
return platform_detector
def check_environment():
"""查系统和Python版本"""
# 识别操作系统
os_name = platform.system()
print(f"当前操作系统: {os_name}")
if os_name not in ['Windows', 'Linux']:
print(f"警告: 未测试的操作系统 {os_name},可能存在问题")
def check_python_version():
"""检查Python版本是否为3.13或更高"""
print("\n" + "=" * 60)
print(" Python版本检查")
print("=" * 60)
from app.utils.platform_utils import platform_detector
current_version = sys.version_info
print(f"当前Python版本: {current_version.major}.{current_version.minor}.{current_version.micro}")
if not platform_detector.check_python_version((3, 13)):
print("\n❌ 错误: Python版本过低!")
print(f" 当前版本: {current_version.major}.{current_version.minor}.{current_version.micro}")
print(" 要求版本: 3.13 或更高")
print("\n请升级到Python 3.13或更高版本:")
print(" 下载地址: https://www.python.org/downloads/")
print("=" * 60)
sys.exit(1)
print(f"✅ Python版本检查通过: {current_version.major}.{current_version.minor}.{current_version.micro}")
print("=" * 60)
return True
# 检查Python版本
python_version = platform.python_version()
print(f"当前Python版本: {python_version}")
# 解析版本号
major, minor, *_ = map(int, python_version.split('.'))
def get_environment():
"""获取运行环境"""
print("\n" + "=" * 60)
print(" 环境配置")
print("=" * 60)
environment = os.getenv("ENVIRONMENT", "development")
print(f"当前环境: {environment}")
if environment not in ["development", "production"]:
print(f"⚠️ 警告: 未知环境 '{environment}',使用默认开发环境")
environment = "development"
print("=" * 60)
return environment
def install_dependencies():
"""检查并安装依赖包"""
print("\n" + "=" * 60)
print(" 依赖包检查")
print("=" * 60)
requirements_file = "requirements.txt"
if not os.path.exists(requirements_file):
print(f"\n❌ 错误: 找不到依赖文件 {requirements_file}")
sys.exit(1)
# 读取已安装的包
try:
result = subprocess.run(
[sys.executable, "-m", "pip", "list", "--format=freeze"],
capture_output=True,
text=True,
check=True
)
installed_packages = {line.split("==")[0].lower() for line in result.stdout.strip().split("\n") if line}
except subprocess.CalledProcessError as e:
print(f"\n❌ 检查已安装包失败: {e}")
sys.exit(1)
# 读取requirements.txt中的包
with open(requirements_file, "r", encoding="utf-8") as f:
required_packages = []
for line in f:
line = line.strip()
if line and not line.startswith("#"):
package_name = line.split("==")[0].lower()
required_packages.append(line)
# 检查缺失的包
missing_packages = []
for package_line in required_packages:
package_name = package_line.split("==")[0].lower()
if package_name not in installed_packages:
missing_packages.append(package_line)
if not missing_packages:
print("\n✅ 所有依赖包已安装,无需重复安装")
print("=" * 60)
if major == 3 and minor == 13:
print("✓ Python版本符合要求 (3.13)")
return True
print(f"\n发现 {len(missing_packages)} 个未安装的依赖包:")
for package in missing_packages:
print(f" - {package}")
print("\n正在安装依赖包...")
try:
subprocess.run(
[sys.executable, "-m", "pip", "install", "-r", requirements_file],
check=True
)
print("\n✅ 依赖包安装成功")
print("=" * 60)
return True
except subprocess.CalledProcessError as e:
print(f"\n❌ 依赖包安装失败: {e}")
print("=" * 60)
sys.exit(1)
def initialize_database():
"""初始化数据库连接"""
print("\n" + "=" * 60)
print(" 数据库初始化")
print("=" * 60)
try:
from app.core.database import db_manager
from app.config.settings import get_settings
settings = get_settings()
print(f"数据库地址: {settings.DB_HOST}:{settings.DB_PORT}")
print(f"数据库名称: {settings.DB_NAME}")
print(f"连接池大小: {settings.DB_POOL_SIZE}")
# 测试数据库连接
if db_manager.test_connection():
print("✅ 数据库连接成功")
else:
print("⚠️ 数据库连接失败,请检查配置")
return False
print("=" * 60)
return True
except Exception as e:
print(f"\n⚠️ 数据库初始化警告: {e}")
print(" 应用将继续启动,但数据库功能可能不可用")
print("=" * 60)
else:
print(f"✗ Python版本不符合要求!")
print(f" 当前版本: {python_version}")
print(f" 要求版本: 3.13.x")
print(f"\n请使用 Python 3.13 版本运行此项目")
print(f"下载地址: https://www.python.org/downloads/")
return False
def start_application(environment: str):
"""启动FastAPI应用"""
print("\n" + "=" * 60)
print(" 启动FastAPI应用")
print("=" * 60)
try:
from app.config.settings import get_settings
import uvicorn
settings = get_settings()
print(f"应用名称: {settings.APP_NAME}")
print(f"应用版本: {settings.APP_VERSION}")
print(f"运行环境: {settings.ENVIRONMENT.value}")
print(f"监听地址: {settings.API_HOST}:{settings.API_PORT}")
print(f"调试模式: {'开启' if settings.DEBUG else '关闭'}")
print(f"自动重载: {'开启' if hasattr(settings, 'RELOAD') and settings.RELOAD else '关闭'}")
print("\n🚀 应用启动中...\n")
print("=" * 60)
# 启动uvicorn服务器
uvicorn.run(
"app.main:app",
host=settings.API_HOST,
port=settings.API_PORT,
reload=settings.RELOAD if hasattr(settings, 'RELOAD') else settings.DEBUG,
log_level=settings.LOG_LEVEL.lower()
)
except KeyboardInterrupt:
print("\n\n应用已停止")
except Exception as e:
print(f"\n❌ 应用启动失败: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
def main():
"""主函数"""
print("\n" + "=" * 60)
print(" Xian Algorithm New - 应用启动程序")
print("=" * 60)
# 检测平台信息
check_platform()
# 检查Python版本
check_python_version()
# 获取环境配置
environment = get_environment()
# 检查并安装依赖
install_dependencies()
# 初始化数据库
initialize_database()
# 启动应用
start_application(environment)
check_environment()
if __name__ == "__main__":