| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #!/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()
|