初始化代码
This commit is contained in:
@@ -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__":
|
||||
|
||||
Reference in New Issue
Block a user