当前位置: 首页 > news >正文

python环境检测

基于python代码实现的python环境检测:

包含电脑系统

python版本

依赖包检查

环境变量检查

当然啦,用户可以基于自己的需求增加多种项目检查,如自定义多种依赖包。

import sys
import platform
import os
from packaging.version import parse  # 替换弃用的pkg_resources

try:
    from colorama import init, Fore, Style

    HAS_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"] = result
        return result

    def check_operating_system(self):
        """检查操作系统"""
        os_info = {
            "system": platform.system(),
            "release": platform.release(),
            "version": platform.version(),
            "status": "OK"  # 操作系统检查通常不会失败,但保留状态字段
        }
        self.report["operating_system"] = os_info
        return os_info

    def 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.environ
            self.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 json
                json.dump(self.report, f, indent=2)

    def _print_colored(self, title, data):
        """带颜色输出"""
        if "status" in data:
            status = data["status"]
            color = Fore.GREEN
            if status == "WARNING":
                color = Fore.YELLOW
            elif status == "ERROR":
                color = Fore.RED

            details = []
            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状态,只有WARNING
            has_errors = True

    if has_errors:
        sys.exit(1)
    else:
        sys.exit(0)

相关文章:

  • 责任链模式详解和在Spring Boot 项目中的使用场景
  • 软开经验总结
  • 【C语言】联合体 `union` 的妙用
  • 第十五届蓝桥杯:dfs之数字接龙
  • 深入解析雪花算法(Snowflake):分布式唯一ID的优雅解决方案
  • 1、CI/CD 平台安装部署(Gitlab+Jenkins)
  • 10个常见的Java面试问题及其答案
  • 嵌入式学习前要了解的基础知识
  • PPP协议
  • nextjs+material UI实现换肤功能
  • 数据集/API 笔记:湿球黑球温度(WBGT)观测数据
  • Linux cat 命令
  • JavaWeb-idea配置smart tomcat
  • Java设计模式 —— 【行为型模式】迭代器模式(Iterator Pattern)详解
  • 我的ChatGPT怎么登不上?
  • CentOS7安装 FFmpeg
  • Self-Pro: A Self-Prompt and Tuning Framework for Graph Neural Networks
  • Spring Boot 监听器(Listeners)详细教程
  • 2024华为OD机试真题-热点网站统计(C++)-E卷-100分
  • AVM 环视拼接 鱼眼相机
  • 种罂粟喂鸡防病?四川广元一村民非法种植毒品原植物被罚​
  • 暴利之下:宠物殡葬行业的冰与火之歌
  • 98年服装“厂二代”:关税压力下,我仍相信中国供应链|湃客Talk
  • 两部门发布山洪灾害气象预警:北京西部、河北西部等局地山洪可能性较大
  • 酒店取消订单加价卖何以屡禁不绝?专家建议建立黑名单并在商家页面醒目标注
  • A股26家游戏企业去年营收近1900亿元:过半净利下滑,出海成为主流选择