diagnose_environment.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. 生产环境诊断脚本
  5. 检查Python版本、可用模块和推荐的脚本版本
  6. """
  7. import sys
  8. import subprocess
  9. def check_python_version():
  10. """检查Python版本"""
  11. version = sys.version_info
  12. version_str = "{}.{}".format(version.major, version.minor)
  13. print("Python版本: {}".format(version_str))
  14. if version.major >= 3 and version.minor >= 7:
  15. return "full", version_str
  16. elif version.major >= 3 and version.minor >= 6:
  17. return "py36", version_str
  18. else:
  19. return "py34", version_str
  20. def check_module(module_name):
  21. """检查模块是否可用"""
  22. try:
  23. __import__(module_name)
  24. return True, "可用"
  25. except ImportError:
  26. return False, "不可用"
  27. def check_dependencies():
  28. """检查关键依赖"""
  29. deps = ['pymysql', 'pandas', 'sqlalchemy']
  30. results = {}
  31. for dep in deps:
  32. available, status = check_module(dep)
  33. results[dep] = (available, status)
  34. print("依赖 {}: {}".format(dep, status))
  35. return results
  36. def recommend_script(python_level, has_typing):
  37. """推荐使用的脚本"""
  38. if python_level == "full" and has_typing:
  39. return "02_parse_score_data_fixed.py", "完整功能版本"
  40. elif python_level in ["full", "py36"] and has_typing:
  41. return "02_parse_score_data_py36_compatible.py", "Python 3.6兼容版本"
  42. else:
  43. return "02_parse_score_data_py34_compatible.py", "超兼容版本(无typing)"
  44. def test_script_syntax(script_name):
  45. """测试脚本语法"""
  46. try:
  47. subprocess.check_call([sys.executable, "-m", "py_compile", script_name],
  48. stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
  49. return True, "语法正确"
  50. except subprocess.CalledProcessError:
  51. return False, "语法错误"
  52. def main():
  53. print("=== 生产环境诊断工具 ===")
  54. print()
  55. # 检查Python版本
  56. python_level, version_str = check_python_version()
  57. # 检查typing模块
  58. has_typing, typing_status = check_module('typing')
  59. print("typing模块: {}".format(typing_status))
  60. print()
  61. # 检查依赖
  62. print("检查依赖包:")
  63. deps_status = check_dependencies()
  64. print()
  65. # 推荐脚本
  66. script_name, script_desc = recommend_script(python_level, has_typing)
  67. print("推荐脚本: {} ({})".format(script_name, script_desc))
  68. # 测试推荐脚本语法
  69. syntax_ok, syntax_msg = test_script_syntax(script_name)
  70. print("脚本语法: {}".format(syntax_msg))
  71. print()
  72. # 给出建议
  73. print("=== 执行建议 ===")
  74. if syntax_ok:
  75. print("✅ 环境检查通过")
  76. print("执行命令:")
  77. print(" nohup python3 {} > 2.log 2>&1 &".format(script_name))
  78. print(" tail -f 2.log")
  79. else:
  80. print("❌ 发现问题,请检查环境配置")
  81. # 检查是否有缺失的依赖
  82. missing_deps = [dep for dep, (available, _) in deps_status.items() if not available]
  83. if missing_deps:
  84. print()
  85. print("缺失依赖,请安装:")
  86. print(" pip3 install --user -r requirements-prod.txt")
  87. print()
  88. print("=== 版本信息 ===")
  89. print("Python: {}".format(version_str))
  90. print("Typing: {}".format(typing_status))
  91. print("推荐脚本: {}".format(script_name))
  92. if __name__ == "__main__":
  93. main()