#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ KaMiXiTong 启动脚本 快速启动开发服务器 """ import os import sys import subprocess from pathlib import Path def check_python_version(): """检查Python版本""" if sys.version_info < (3, 6): print("❌ 错误: 需要Python 3.6或更高版本") print(f"当前版本: {sys.version}") sys.exit(1) print(f"✅ Python版本检查通过: {sys.version}") def install_dependencies(): """安装依赖""" print("📦 正在安装依赖包...") try: subprocess.check_call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt']) print("✅ 依赖安装完成") except subprocess.CalledProcessError: print("❌ 依赖安装失败") sys.exit(1) def check_env_file(): """检查环境配置文件""" env_file = Path('.env') if not env_file.exists(): print("⚠️ 未找到 .env 文件,正在创建默认配置...") try: with open('.env.example', 'r', encoding='utf-8') as src: with open('.env', 'w', encoding='utf-8') as dst: dst.write(src.read()) print("✅ 已创建默认 .env 文件") except FileNotFoundError: print("❌ 未找到 .env.example 文件") else: print("✅ 环境配置文件已存在") def init_database(): """初始化数据库""" print("🗄️ 正在初始化数据库...") try: from app import create_app, db from app.models.admin import Admin app = create_app('development') with app.app_context(): # 创建数据表 db.create_all() # 创建默认管理员 admin = Admin.query.filter_by(username='admin').first() if not admin: admin = Admin( username='admin', email='admin@example.com', role=1 # 超级管理员 ) admin.set_password('admin123') db.session.add(admin) db.session.commit() print("✅ 默认管理员账号创建成功: admin/admin123") else: print("✅ 数据库已初始化") except Exception as e: print(f"❌ 数据库初始化失败: {e}") sys.exit(1) def create_directories(): """创建必要的目录""" directories = [ 'logs', 'static/uploads', 'static/css', 'static/js' ] for directory in directories: Path(directory).mkdir(parents=True, exist_ok=True) print("✅ 目录结构创建完成") def main(): """主函数""" print("=" * 50) print(" KaMiXiTong 软件授权管理系统") print(" 启动脚本 v1.0") print("=" * 50) # 检查Python版本 check_python_version() # 创建目录 create_directories() # 检查环境配置 check_env_file() # 安装依赖 if not os.environ.get('SKIP_INSTALL'): install_dependencies() else: print("⏭️ 跳过依赖安装") # 初始化数据库 init_database() print("\n" + "=" * 50) print("🚀 启动开发服务器...") print("=" * 50) print("📍 访问地址: http://localhost:5000") print("👤 管理员账号: admin") print("🔑 管理员密码: admin123") print("📚 API文档: http://localhost:5000/api/v1") print("⏹️ 按 Ctrl+C 停止服务器") print("=" * 50 + "\n") # 启动Flask应用 try: from run import app app.run( host='0.0.0.0', port=5000, debug=True ) except KeyboardInterrupt: print("\n👋 服务器已停止") except Exception as e: print(f"❌ 启动失败: {e}") sys.exit(1) if __name__ == '__main__': main()