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)