verify_setup.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #!/usr/bin/env python
  2. """
  3. 验证虚拟环境和项目设置
  4. 检查:
  5. - Python版本
  6. - 依赖包安装
  7. - 数据库连接
  8. - Flask应用创建
  9. """
  10. import sys
  11. import os
  12. from pathlib import Path
  13. def check_python_version():
  14. """检查Python版本"""
  15. version = sys.version_info
  16. print(f"Python版本: {version.major}.{version.minor}.{version.micro}")
  17. if version.major < 3 or (version.major == 3 and version.minor < 8):
  18. print("❌ 需要Python 3.8或更高版本")
  19. return False
  20. print("✓ Python版本符合要求")
  21. return True
  22. def check_dependencies():
  23. """检查关键依赖"""
  24. dependencies = [
  25. ('flask', 'Flask'),
  26. ('sqlalchemy', 'SQLAlchemy'),
  27. ('celery', 'Celery'),
  28. ('boto3', 'AWS SDK'),
  29. ('pytest', 'Pytest'),
  30. ('bcrypt', 'bcrypt'),
  31. ('cryptography', 'Cryptography'),
  32. ]
  33. print("\n检查依赖包:")
  34. all_ok = True
  35. for module_name, display_name in dependencies:
  36. try:
  37. module = __import__(module_name)
  38. version = getattr(module, '__version__', 'unknown')
  39. print(f" ✓ {display_name}: {version}")
  40. except ImportError:
  41. print(f" ❌ {display_name}: 未安装")
  42. all_ok = False
  43. return all_ok
  44. def check_flask_app():
  45. """检查Flask应用创建"""
  46. print("\n检查Flask应用:")
  47. try:
  48. from app import create_app, db
  49. app = create_app('testing') # 使用测试配置
  50. with app.app_context():
  51. # 检查数据库连接 (SQLAlchemy 2.0+ 语法)
  52. with db.engine.connect() as conn:
  53. conn.execute(db.text('SELECT 1'))
  54. print(" ✓ Flask应用创建成功")
  55. print(" ✓ 数据库连接正常")
  56. return True
  57. except Exception as e:
  58. print(f" ❌ Flask应用检查失败: {e}")
  59. return False
  60. def check_database():
  61. """检查数据库文件"""
  62. print("\n检查数据库:")
  63. # 检查开发数据库
  64. dev_db = Path('instance/dev.db')
  65. if dev_db.exists():
  66. print(f" ✓ 开发数据库存在: {dev_db}")
  67. print(f" 大小: {dev_db.stat().st_size} bytes")
  68. else:
  69. print(" ⚠️ 开发数据库不存在,运行 'python init_db.py' 创建")
  70. return True
  71. def check_directories():
  72. """检查必要目录"""
  73. print("\n检查目录结构:")
  74. directories = [
  75. 'app',
  76. 'config',
  77. 'migrations',
  78. 'tests',
  79. 'instance',
  80. 'uploads',
  81. 'reports'
  82. ]
  83. all_ok = True
  84. for directory in directories:
  85. path = Path(directory)
  86. if path.exists():
  87. print(f" ✓ {directory}/")
  88. else:
  89. print(f" ⚠️ {directory}/ 不存在")
  90. if directory in ['uploads', 'reports']:
  91. # 这些目录会在应用启动时自动创建
  92. pass
  93. else:
  94. all_ok = False
  95. return all_ok
  96. def main():
  97. print("="*50)
  98. print("虚拟环境和项目设置验证")
  99. print("="*50)
  100. checks = [
  101. ("Python版本", check_python_version),
  102. ("依赖包", check_dependencies),
  103. ("目录结构", check_directories),
  104. ("数据库", check_database),
  105. ("Flask应用", check_flask_app),
  106. ]
  107. results = []
  108. for name, check_func in checks:
  109. try:
  110. result = check_func()
  111. results.append((name, result))
  112. except Exception as e:
  113. print(f" ❌ {name}检查失败: {e}")
  114. results.append((name, False))
  115. print("\n" + "="*50)
  116. print("验证结果:")
  117. print("="*50)
  118. all_passed = True
  119. for name, result in results:
  120. status = "✓ 通过" if result else "❌ 失败"
  121. print(f" {name}: {status}")
  122. if not result:
  123. all_passed = False
  124. if all_passed:
  125. print("\n🎉 所有检查通过! 环境设置正确。")
  126. print("\n可以开始开发:")
  127. print(" python run.py - 启动Flask应用")
  128. print(" python init_db.py - 初始化数据库")
  129. print(" pytest - 运行测试")
  130. else:
  131. print("\n⚠️ 部分检查失败,请检查上述问题。")
  132. print("="*50)
  133. if __name__ == '__main__':
  134. main()