diff --git a/modules/launch_util.py b/modules/launch_util.py index 00fff8ae..8d92fad0 100644 --- a/modules/launch_util.py +++ b/modules/launch_util.py @@ -5,6 +5,11 @@ import subprocess import sys import re import logging +import importlib.metadata +import packaging.version +from packaging.requirements import Requirement + + logging.getLogger("torch.distributed.nn").setLevel(logging.ERROR) # sshh... @@ -73,35 +78,26 @@ def run_pip(command, desc=None, live=default_command_live): def requirements_met(requirements_file): - """ - Does a simple parse of a requirements.txt file to determine if all rerqirements in it - are already installed. Returns True if so, False if not installed or parsing fails. - """ - - import importlib.metadata - import packaging.version - with open(requirements_file, "r", encoding="utf8") as file: for line in file: - if line.strip() == "": + line = line.strip() + if line == "" or line.startswith('#'): continue - m = re.match(re_requirement, line) - if m is None: - return False - - package = m.group(1).strip() - version_required = (m.group(2) or "").strip() - - if version_required == "": - continue + requirement = Requirement(line) + package = requirement.name try: version_installed = importlib.metadata.version(package) - except Exception: - return False + installed_version = packaging.version.parse(version_installed) - if packaging.version.parse(version_required) != packaging.version.parse(version_installed): + # Check if the installed version satisfies the requirement + if installed_version not in requirement.specifier: + print(f"Version mismatch for {package}: Installed version {version_installed} does not meet requirement {requirement}") + return False + except Exception as e: + print(f"Error checking version for {package}: {e}") return False return True +