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 07:01:58 -06:00 committed by lllyasviel
parent 80068a0cd7
commit ff2187efed
1 changed files with 17 additions and 21 deletions

View File

@ -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