53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Python environment health check - verifies key packages are available."""
|
|
|
|
import sys
|
|
import json
|
|
from datetime import datetime, timezone
|
|
|
|
def check_module(name):
|
|
try:
|
|
__import__(name)
|
|
return {"status": "ok", "available": True}
|
|
except ImportError as e:
|
|
return {"status": "missing", "available": False, "error": str(e)}
|
|
|
|
def check_package(name, import_name=None):
|
|
import_name = import_name or name
|
|
try:
|
|
mod = __import__(import_name)
|
|
version = getattr(mod, '__version__', 'unknown')
|
|
return {"status": "ok", "version": version, "available": True}
|
|
except ImportError as e:
|
|
return {"status": "missing", "available": False, "error": str(e)}
|
|
|
|
def main():
|
|
results = {
|
|
"python": {
|
|
"status": "ok",
|
|
"version": sys.version,
|
|
"executable": sys.executable
|
|
},
|
|
"packages": {
|
|
"json": check_module("json"),
|
|
"subprocess": check_module("subprocess"),
|
|
"datetime": check_module("datetime"),
|
|
}
|
|
}
|
|
|
|
all_ok = all(
|
|
p.get("status") == "ok" or p.get("available", False)
|
|
for p in results["packages"].values()
|
|
)
|
|
|
|
output = {
|
|
"all_ok": all_ok,
|
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
"components": results
|
|
}
|
|
|
|
print(json.dumps(output, indent=2))
|
|
sys.exit(0 if all_ok else 1)
|
|
|
|
if __name__ == "__main__":
|
|
main() |