Upgrade requirements_met function (#1955)

* Upgrade requirements_met function

* Removed extra import

* Using Requirements instead of Regex
This commit is contained in:
Hunter-Houts
2024-01-27 05:12:34 -08:00
committed by lllyasviel
parent 80068a0cd7
commit ff2187efed
+17 -21
View File
@@ -5,6 +5,11 @@ import subprocess
import sys import sys
import re import re
import logging import logging
import importlib.metadata
import packaging.version
from packaging.requirements import Requirement
logging.getLogger("torch.distributed.nn").setLevel(logging.ERROR) # sshh... 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): 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: with open(requirements_file, "r", encoding="utf8") as file:
for line in file: for line in file:
if line.strip() == "": line = line.strip()
if line == "" or line.startswith('#'):
continue continue
m = re.match(re_requirement, line) requirement = Requirement(line)
if m is None: package = requirement.name
return False
package = m.group(1).strip()
version_required = (m.group(2) or "").strip()
if version_required == "":
continue
try: try:
version_installed = importlib.metadata.version(package) version_installed = importlib.metadata.version(package)
except Exception: installed_version = packaging.version.parse(version_installed)
return False
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 False
return True return True