Files
core/script/install_integration_requirements.py
2025-08-11 13:12:29 +02:00

63 lines
1.5 KiB
Python

"""Install requirements for one or more integrations."""
import argparse
from pathlib import Path
import subprocess
import sys
from .gen_requirements_all import gather_recursive_requirements
from .util import valid_integration
def get_arguments() -> argparse.Namespace:
"""Get parsed passed in arguments."""
parser = argparse.ArgumentParser(
description="Install requirements for one or more integrations"
)
parser.add_argument(
"integrations",
nargs="+",
type=valid_integration,
help="Integration(s) to target.",
)
return parser.parse_args()
def main() -> int | None:
"""Install requirements for the specified integrations."""
if not Path("requirements_all.txt").is_file():
print("Run from project root")
return 1
args = get_arguments()
# Gather requirements for all specified integrations
all_requirements = set()
for integration in args.integrations:
requirements = gather_recursive_requirements(integration)
all_requirements.update(requirements)
if all_requirements:
cmd = [
"uv",
"pip",
"install",
"-c",
"homeassistant/package_constraints.txt",
"-U",
*sorted(all_requirements), # Sort for consistent output
]
print(" ".join(cmd))
subprocess.run(
cmd,
check=True,
)
else:
print("No requirements to install.")
return None
if __name__ == "__main__":
sys.exit(main())