#!/usr/bin/env python """ 验证虚拟环境和项目设置 检查: - Python版本 - 依赖包安装 - 数据库连接 - Flask应用创建 """ import sys import os from pathlib import Path def check_python_version(): """检查Python版本""" version = sys.version_info print(f"Python版本: {version.major}.{version.minor}.{version.micro}") if version.major < 3 or (version.major == 3 and version.minor < 8): print("❌ 需要Python 3.8或更高版本") return False print("✓ Python版本符合要求") return True def check_dependencies(): """检查关键依赖""" dependencies = [ ('flask', 'Flask'), ('sqlalchemy', 'SQLAlchemy'), ('celery', 'Celery'), ('boto3', 'AWS SDK'), ('pytest', 'Pytest'), ('bcrypt', 'bcrypt'), ('cryptography', 'Cryptography'), ] print("\n检查依赖包:") all_ok = True for module_name, display_name in dependencies: try: module = __import__(module_name) version = getattr(module, '__version__', 'unknown') print(f" ✓ {display_name}: {version}") except ImportError: print(f" ❌ {display_name}: 未安装") all_ok = False return all_ok def check_flask_app(): """检查Flask应用创建""" print("\n检查Flask应用:") try: from app import create_app, db app = create_app('testing') # 使用测试配置 with app.app_context(): # 检查数据库连接 (SQLAlchemy 2.0+ 语法) with db.engine.connect() as conn: conn.execute(db.text('SELECT 1')) print(" ✓ Flask应用创建成功") print(" ✓ 数据库连接正常") return True except Exception as e: print(f" ❌ Flask应用检查失败: {e}") return False def check_database(): """检查数据库文件""" print("\n检查数据库:") # 检查开发数据库 dev_db = Path('instance/dev.db') if dev_db.exists(): print(f" ✓ 开发数据库存在: {dev_db}") print(f" 大小: {dev_db.stat().st_size} bytes") else: print(" ⚠️ 开发数据库不存在,运行 'python init_db.py' 创建") return True def check_directories(): """检查必要目录""" print("\n检查目录结构:") directories = [ 'app', 'config', 'migrations', 'tests', 'instance', 'uploads', 'reports' ] all_ok = True for directory in directories: path = Path(directory) if path.exists(): print(f" ✓ {directory}/") else: print(f" ⚠️ {directory}/ 不存在") if directory in ['uploads', 'reports']: # 这些目录会在应用启动时自动创建 pass else: all_ok = False return all_ok def main(): print("="*50) print("虚拟环境和项目设置验证") print("="*50) checks = [ ("Python版本", check_python_version), ("依赖包", check_dependencies), ("目录结构", check_directories), ("数据库", check_database), ("Flask应用", check_flask_app), ] results = [] for name, check_func in checks: try: result = check_func() results.append((name, result)) except Exception as e: print(f" ❌ {name}检查失败: {e}") results.append((name, False)) print("\n" + "="*50) print("验证结果:") print("="*50) all_passed = True for name, result in results: status = "✓ 通过" if result else "❌ 失败" print(f" {name}: {status}") if not result: all_passed = False if all_passed: print("\n🎉 所有检查通过! 环境设置正确。") print("\n可以开始开发:") print(" python run.py - 启动Flask应用") print(" python init_db.py - 初始化数据库") print(" pytest - 运行测试") else: print("\n⚠️ 部分检查失败,请检查上述问题。") print("="*50) if __name__ == '__main__': main()