基于python代码实现的python环境检测:
包含电脑系统
python版本
依赖包检查
环境变量检查
当然啦,用户可以基于自己的需求增加多种项目检查,如自定义多种依赖包。
import sys
import platform
import os
from packaging.version import parse # 替换弃用的pkg_resourcestry:from colorama import init, Fore, StyleHAS_COLORAMA = True
except ImportError:HAS_COLORAMA = False# 初始化颜色输出
if HAS_COLORAMA:init(autoreset=True)# 配置检查项
REQUIRED_PYTHON_VERSION = (3, 6)
REQUIRED_PACKAGES = {"numpy": "1.18.0","pandas": "1.0.0","requests": "2.24.0"
}
REQUIRED_ENV_VARS = ["HOME", "PATH"]class EnvironmentChecker:def __init__(self):self.report = {"python_version": {},"operating_system": {},"packages": {},"environment_vars": {}}def check_python_version(self):"""检查Python版本"""result = {"required": ".".join(map(str, REQUIRED_PYTHON_VERSION)),"installed": platform.python_version(),"status": "OK"}if sys.version_info < REQUIRED_PYTHON_VERSION:result["status"] = "ERROR"elif sys.version_info[0] != REQUIRED_PYTHON_VERSION[0]:result["status"] = "ERROR"else:result["status"] = "OK"self.report["python_version"] = resultreturn resultdef check_operating_system(self):"""检查操作系统"""os_info = {"system": platform.system(),"release": platform.release(),"version": platform.version(),"status": "OK" # 操作系统检查通常不会失败,但保留状态字段}self.report["operating_system"] = os_inforeturn os_infodef check_packages(self):"""检查安装的包"""for pkg, req_version in REQUIRED_PACKAGES.items():try:__import__(pkg)installed_version = sys.modules[pkg].__version__status = "OK" if parse(installed_version) >= parse(req_version) else "WARNING"except ImportError:installed_version = "Not installed"status = "ERROR"except AttributeError:installed_version = "Unknown version"status = "WARNING"self.report["packages"][pkg] = {"required": req_version,"installed": installed_version,"status": status}return self.report["packages"]def check_environment_vars(self):"""检查环境变量"""for var in REQUIRED_ENV_VARS:exists = var in os.environself.report["environment_vars"][var] = {"exists": exists,"status": "OK" if exists else "WARNING"}return self.report["environment_vars"]def generate_report(self, save_to_file=False):"""生成检查报告"""self.check_python_version()self.check_operating_system()self.check_packages()self.check_environment_vars()# 控制台输出self._print_colored("Python版本检查:", self.report["python_version"])self._print_colored("\n操作系统信息:", self.report["operating_system"])print("\n依赖包检查:")for pkg, info in self.report["packages"].items():self._print_colored(f"- {pkg}", info)print("\n环境变量检查:")for var, info in self.report["environment_vars"].items():self._print_colored(f"- {var}", info)# 保存到文件if save_to_file:with open("environment_report.txt", "w") as f:import jsonjson.dump(self.report, f, indent=2)def _print_colored(self, title, data):"""带颜色输出"""if "status" in data:status = data["status"]color = Fore.GREENif status == "WARNING":color = Fore.YELLOWelif status == "ERROR":color = Fore.REDdetails = []for k, v in data.items():if k != "status":details.append(f"{k}={v}")if HAS_COLORAMA:print(f"{color}{title.ljust(20)}{Style.RESET_ALL} {', '.join(details)}")else:print(f"{title.ljust(20)} [{status}] {', '.join(details)}")else:details = [f"{k}={v}" for k, v in data.items()]print(f"{title.ljust(20)} {', '.join(details)}")if __name__ == "__main__":checker = EnvironmentChecker()print("=" * 60)print("Python环境检查报告".center(60))print("=" * 60)checker.generate_report(save_to_file=True)print("\n" + "=" * 60)# 修正后的错误检查逻辑has_errors = False# 检查Python版本状态if checker.report["python_version"]["status"] == "ERROR":has_errors = True# 检查所有包的安装状态for pkg_info in checker.report["packages"].values():if pkg_info["status"] == "ERROR":has_errors = True# 检查环境变量状态for env_info in checker.report["environment_vars"].values():if env_info["status"] == "ERROR": # 注意这里原代码中没有ERROR状态,只有WARNINGhas_errors = Trueif has_errors:sys.exit(1)else:sys.exit(0)