From ba465e128142cb3b326920a9d6a8b1236d97e0d7 Mon Sep 17 00:00:00 2001 From: Rosas Behoundja Date: Sun, 13 Apr 2025 00:11:32 +0100 Subject: [PATCH] refactor: replace pkg_resources with importlib + packaging --- check_requirements.py | 37 ++++++++++++++++++++++++++----------- requirements.txt | 12 +++++++++--- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/check_requirements.py b/check_requirements.py index 7c0047b..6056d36 100644 --- a/check_requirements.py +++ b/check_requirements.py @@ -1,20 +1,35 @@ - -import pkg_resources import sys +from importlib.metadata import version, PackageNotFoundError +from packaging.requirements import Requirement +from packaging.version import Version def check_requirements(requirements_file='requirements.txt'): with open(requirements_file, 'r') as file: requirements = file.readlines() - for requirement in requirements: - requirement = requirement.strip() - try: - pkg_resources.require(requirement) - except pkg_resources.VersionConflict as e: - print(f"WARNING: {str(e)}") - except pkg_resources.DistributionNotFound as e: - print(f"ERROR: {str(e)}") - sys.exit(1) + for requirement_line in requirements: + requirement_line = requirement_line.strip() + if not requirement_line or requirement_line.startswith('#'): + continue + + try: + req = Requirement(requirement_line) + try: + # Get installed version + installed_version = version(req.name) + installed = Version(installed_version) + + # Check if versions matches + if req.specifier and not req.specifier.contains(installed): + print(f"WARNING: Version conflict for {req.name}. " + f"Required: {req.specifier}, installed: {installed_version}") + + except PackageNotFoundError: + print(f"ERROR: Package {req.name} not found") + sys.exit(1) + + except Exception as e: + print(f"WARNING: Could not parse requirement '{requirement_line}': {str(e)}") if __name__ == "__main__": check_requirements() diff --git a/requirements.txt b/requirements.txt index 06acdca..f815862 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,12 @@ grpcio==1.65.4 grpcio-tools==1.65.4 -scipy==1.14.1 -pyrusgeom==0.1.2 Nuitka==2.5 -psutil==5.8.0 \ No newline at end of file +numpy==2.2.4 +ordered-set==4.1.0 +packaging==24.2 +protobuf==5.29.4 +psutil==5.8.0 +pyrusgeom==0.1.2 +scipy==1.14.1 +setuptools==78.1.0 +zstandard==0.23.0