Kamixitong/install_deps.py

123 lines
3.7 KiB
Python
Raw Normal View History

2025-11-11 21:39:12 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
依赖安装脚本
自动安装项目所需的依赖包
"""
import subprocess
import sys
import os
def install_package(package):
"""安装单个包"""
try:
print(f"正在安装 {package}...")
result = subprocess.run([sys.executable, "-m", "pip", "install", package],
capture_output=True, text=True)
if result.returncode == 0:
print(f"{package} 安装成功")
return True
else:
print(f"{package} 安装失败: {result.stderr}")
return False
except Exception as e:
print(f"❌ 安装 {package} 时出错: {e}")
return False
def install_requirements():
"""从 requirements.txt 安装依赖"""
try:
print("正在从 requirements.txt 安装依赖...")
result = subprocess.run([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"],
capture_output=True, text=True)
if result.returncode == 0:
print("✅ 所有依赖安装成功")
return True
else:
print(f"❌ 依赖安装失败: {result.stderr}")
return False
except Exception as e:
print(f"❌ 安装依赖时出错: {e}")
return False
def check_import(module_name):
"""检查模块是否可以导入"""
try:
__import__(module_name)
return True
except ImportError:
return False
def main():
"""主函数"""
print("=" * 50)
print("KaMiXiTong 依赖安装脚本")
print("=" * 50)
# 检查 requirements.txt 是否存在
if not os.path.exists("requirements.txt"):
print("❌ requirements.txt 文件不存在")
return False
# 尝试从 requirements.txt 安装
if install_requirements():
print("\n✅ 依赖安装完成!")
else:
print("\n⚠️ 从 requirements.txt 安装失败,尝试单独安装关键依赖...")
# 关键依赖列表
critical_packages = [
"Flask==2.3.3",
"Flask-SQLAlchemy==3.0.5",
"Flask-Login==0.6.3",
"PyMySQL==1.1.0",
"python-dotenv==1.0.0",
"cryptography==41.0.4",
"SQLAlchemy>=2.0.0" # 确保使用 SQLAlchemy 2.0+
]
success_count = 0
for package in critical_packages:
if install_package(package):
success_count += 1
print(f"\n安装结果: {success_count}/{len(critical_packages)} 个包安装成功")
# 检查关键模块是否可以导入
print("\n检查关键模块...")
modules_to_check = [
("flask", "Flask"),
("flask_sqlalchemy", "Flask-SQLAlchemy"),
("flask_login", "Flask-Login"),
("pymysql", "PyMySQL"),
("cryptography", "cryptography"),
("dotenv", "python-dotenv"),
("sqlalchemy", "SQLAlchemy")
]
all_good = True
for module, name in modules_to_check:
if check_import(module):
print(f"{name} 可用")
else:
print(f"{name} 不可用")
all_good = False
if all_good:
print("\n🎉 所有依赖检查通过!现在可以运行 init_db.py 了。")
print("\n下一步:")
print(" python test_crypto.py # 测试加密功能")
print(" python init_db.py # 初始化数据库")
else:
print("\n⚠️ 部分依赖仍有问题,请手动安装或检查网络连接。")
print("\n手动安装命令:")
print(" pip install -r requirements.txt")
print("")
print(" pip install cryptography==41.0.4")
return all_good
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)