import sys import logging from pathlib import Path logger = logging.getLogger(__name__) if sys.version_info < (3, 8): import importlib_metadata else: import importlib.metadata as importlib_metadata import launch def ensure_installed(package): isinstalled = launch.is_installed(package) if not isinstalled: launch.run_pip(f"install {package}", desc=f"{package}") def ensure_version(package, version): isinstalled = launch.is_installed(package) if isinstalled: installed_version = importlib_metadata.version(package) if installed_version == version: return launch.run_pip(f"install {package}=={version}", desc=f"{package}=={version}") def check_versions(): req_file = Path(__file__).parent / "requirements.txt" for row in open(req_file): splits = row.split("==") try: if "dynamicprompts" in row: launch.run_pip(f"install -U {row}", desc=row) elif len(splits) == 2: package = splits[0].strip() version = splits[1].strip() ensure_version(package, version) else: package = row.strip() ensure_installed(package) except Exception as e: logger.exception(e) check_versions()