Files
openpilot/scripts/lint/check_dependencies.py
T
github-actions[bot] 067912aa6b sunnypilot v2026.003.000
version: sunnypilot v2026.003.000 (staging)
date: 2026-10-26T14:56:20
master commit: a06366ce9246962f313380e4ebe15955e720e7a5
2026-10-26 14:56:20 +00:00

38 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import tomllib
import importlib.metadata
from pathlib import Path
def main() -> int:
if sys.prefix == sys.base_prefix:
print("Dependency checks require a virtual environment. Run tools/op.sh setup first.")
return 1
project = tomllib.loads((Path(__file__).resolve().parents[2] / "pyproject.toml").read_text())["project"]
direct = len(project["dependencies"]) + sum(len(deps) for deps in project["optional-dependencies"].values())
# Count each installed package once, including transitive dependencies and all extras.
packages = {dist.metadata["Name"].lower().replace("_", "-") for dist in importlib.metadata.distributions()}
# Logical file sizes avoid filesystem block-size differences. Don't follow links to the interpreter or source tree.
size = sum(path.stat().st_size for path in Path(sys.prefix).rglob("*") if not path.is_symlink() and path.is_file())
"""
This test prevents our depency footprint from growing.
These values are *not* intended to be increased, and we
expect to strictly drive these down over time.
"""
failed = False
for name, value, limit in (
("Direct dependencies (all extras)", direct, 39),
("Total dependencies", len(packages), 84),
("Venv size (MiB)", size / 1024**2, 570),
):
print(f"{name}: {value:g} (limit: {limit})")
failed |= value > limit
return int(failed)
if __name__ == "__main__":
raise SystemExit(main())