test_installation.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 安装测试脚本
  5. Installation Test Script
  6. 用于验证所有依赖是否正确安装
  7. """
  8. import sys
  9. from rich.console import Console
  10. from rich.table import Table
  11. console = Console()
  12. def test_imports():
  13. """测试所有必要的库导入"""
  14. test_results = []
  15. # 核心库测试
  16. libraries = [
  17. ('imaplib', '邮件IMAP协议'),
  18. ('smtplib', '邮件SMTP协议'),
  19. ('email', '邮件处理'),
  20. ('json', 'JSON处理'),
  21. ('pandas', '数据处理'),
  22. ('numpy', '数值计算'),
  23. ('jieba', '中文分词'),
  24. ('textblob', '文本处理'),
  25. ('langdetect', '语言检测'),
  26. ('sklearn', '机器学习'),
  27. ('dateparser', '日期解析'),
  28. ('arrow', '时间处理'),
  29. ('jinja2', '模板引擎'),
  30. ('matplotlib', '图表绘制'),
  31. ('seaborn', '统计图表'),
  32. ('tqdm', '进度条'),
  33. ('rich', '终端美化')
  34. ]
  35. for lib_name, description in libraries:
  36. try:
  37. __import__(lib_name)
  38. test_results.append((lib_name, description, "✅ 成功", "green"))
  39. except ImportError as e:
  40. test_results.append((lib_name, description, f"❌ 失败: {str(e)}", "red"))
  41. return test_results
  42. def test_files():
  43. """测试必要文件是否存在"""
  44. import os
  45. files_to_check = [
  46. ('config/email_config.json', '邮箱配置文件'),
  47. ('templates/reply_templates.json', '回复模板文件'),
  48. ('EmailSmartAssistant.ipynb', '主程序Notebook'),
  49. ('requirements.txt', '依赖列表'),
  50. ('README.md', '说明文档')
  51. ]
  52. file_results = []
  53. for file_path, description in files_to_check:
  54. if os.path.exists(file_path):
  55. file_results.append((file_path, description, "✅ 存在", "green"))
  56. else:
  57. file_results.append((file_path, description, "❌ 缺失", "red"))
  58. return file_results
  59. def main():
  60. """主测试函数"""
  61. console.print("🧪 智能邮件助手 - 安装测试", style="bold blue")
  62. console.print("=" * 50)
  63. # 测试Python版本
  64. python_version = f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
  65. console.print(f"Python版本: {python_version}", style="cyan")
  66. if sys.version_info < (3, 7):
  67. console.print("⚠️ 建议使用Python 3.7或更高版本", style="yellow")
  68. console.print()
  69. # 测试库导入
  70. console.print("📚 测试库导入...", style="bold")
  71. import_results = test_imports()
  72. table = Table(title="库导入测试结果")
  73. table.add_column("库名称", style="cyan")
  74. table.add_column("描述", style="white")
  75. table.add_column("状态", style="white")
  76. success_count = 0
  77. for lib_name, description, status, color in import_results:
  78. table.add_row(lib_name, description, status)
  79. if "成功" in status:
  80. success_count += 1
  81. console.print(table)
  82. console.print(f"导入成功: {success_count}/{len(import_results)}", style="green" if success_count == len(import_results) else "yellow")
  83. console.print()
  84. # 测试文件存在
  85. console.print("📁 测试文件完整性...", style="bold")
  86. file_results = test_files()
  87. file_table = Table(title="文件完整性测试")
  88. file_table.add_column("文件路径", style="cyan")
  89. file_table.add_column("描述", style="white")
  90. file_table.add_column("状态", style="white")
  91. file_success = 0
  92. for file_path, description, status, color in file_results:
  93. file_table.add_row(file_path, description, status)
  94. if "存在" in status:
  95. file_success += 1
  96. console.print(file_table)
  97. console.print(f"文件完整: {file_success}/{len(file_results)}", style="green" if file_success == len(file_results) else "yellow")
  98. console.print()
  99. # 总结
  100. if success_count == len(import_results) and file_success == len(file_results):
  101. console.print("🎉 所有测试通过!可以开始使用智能邮件助手。", style="bold green")
  102. console.print("💡 下一步:运行 'jupyter notebook EmailSmartAssistant.ipynb'", style="blue")
  103. else:
  104. console.print("⚠️ 存在问题,请检查上述失败项目。", style="bold yellow")
  105. if success_count < len(import_results):
  106. console.print("📦 安装缺失的库:pip install -r requirements.txt", style="cyan")
  107. if __name__ == "__main__":
  108. main()