diff --git a/.github/workflows/test-cm4mlops-wheel-macos.yml b/.github/workflows/test-cm4mlops-wheel-macos.yml index a37395802a..fede3adb9f 100644 --- a/.github/workflows/test-cm4mlops-wheel-macos.yml +++ b/.github/workflows/test-cm4mlops-wheel-macos.yml @@ -6,6 +6,9 @@ on: - main - dev - mlperf-inference + paths: + - '.github/workflows/test-cm4mlops-wheel-macos.yml' + - 'setup.py' jobs: build: diff --git a/.github/workflows/test-cm4mlops-wheel-ubuntu.yml b/.github/workflows/test-cm4mlops-wheel-ubuntu.yml index f2e41371c5..4a37a5290e 100644 --- a/.github/workflows/test-cm4mlops-wheel-ubuntu.yml +++ b/.github/workflows/test-cm4mlops-wheel-ubuntu.yml @@ -6,6 +6,9 @@ on: - main - dev - mlperf-inference + paths: + - '.github/workflows/test-cm4mlops-wheel-ubuntu.yml' + - 'setup.py' jobs: build: @@ -13,7 +16,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, ubuntu-20.04] - python-version: ['3.8', '3.11', '3.12'] + python-version: ['3.7', '3.8', '3.11', '3.12'] exclude: - os: ubuntu-latest python-version: "3.8" diff --git a/.github/workflows/test-cm4mlops-wheel-windows.yml b/.github/workflows/test-cm4mlops-wheel-windows.yml index 0978ef5d59..68bf199a7e 100644 --- a/.github/workflows/test-cm4mlops-wheel-windows.yml +++ b/.github/workflows/test-cm4mlops-wheel-windows.yml @@ -6,6 +6,9 @@ on: - main - dev - mlperf-inference + paths: + - '.github/workflows/test-cm4mlops-wheel-windows.yml' + - 'setup.py' jobs: build: diff --git a/setup.py b/setup.py index 45f577ed51..e7c96a97cd 100644 --- a/setup.py +++ b/setup.py @@ -8,6 +8,21 @@ import platform import os +# Try to use importlib.metadata for Python 3.8+ +try: + if sys.version_info >= (3, 8): + from importlib.metadata import version, PackageNotFoundError + else: + # Fallback to pkg_resources for Python < 3.8 + import pkg_resources + PackageNotFoundError = pkg_resources.DistributionNotFound +except ImportError: + # If importlib.metadata is unavailable, fall back to pkg_resources + import pkg_resources + PackageNotFoundError = pkg_resources.DistributionNotFound + + + class CustomInstallCommand(install): def run(self): self.get_sys_platform() @@ -19,6 +34,16 @@ def run(self): # Call the custom function return self.custom_function() + def is_package_installed(self, package_name): + try: + if sys.version_info >= (3, 8): + version(package_name) # Tries to get the version of the package + else: + pkg_resources.get_distribution(package_name) # Fallback for < 3.8 + return True + except PackageNotFoundError: + return False + def install_system_packages(self): # List of packages to install via system package manager packages = [] @@ -37,11 +62,8 @@ def install_system_packages(self): if name in sys.modules: pass #nothing needed - elif (spec := importlib.util.find_spec(name)) is not None: - module = importlib.util.module_from_spec(spec) - sys.modules[name] = module - spec.loader.exec_module(module) - #print(f"{name} has been imported") + elif self.is_package_installed(name): + pass else: packages.append("python3-venv")