diff --git a/.github/workflows/ci-testing.yml b/.github/workflows/ci-testing.yml index a91a0515..4bf27b80 100644 --- a/.github/workflows/ci-testing.yml +++ b/.github/workflows/ci-testing.yml @@ -14,7 +14,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-22.04, macos-12, windows-2022] - python-version: [3.8] + python-version: ["3.7", "3.10"] requires: ['oldest', 'latest'] timeout-minutes: 35 diff --git a/requirements/base.txt b/requirements/base.txt new file mode 100644 index 00000000..94a71356 --- /dev/null +++ b/requirements/base.txt @@ -0,0 +1 @@ +importlib-metadata>=4.0.0; python_version < '3.8' diff --git a/requirements/test.txt b/requirements/test.txt index 36f35a38..459e1d1a 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,5 +1,5 @@ -coverage>=5.0 +coverage==6.5.0 codecov>=2.1 -pytest>=6.0 -pytest-cov -pytest-timeout +pytest==7.2.0 +pytest-cov==4.0.0 +pytest-timeout==2.1.0 diff --git a/setup.py b/setup.py index 0f0c3dd6..cbae7960 100755 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ #!/usr/bin/env python - +import glob import os from importlib.util import module_from_spec, spec_from_file_location @@ -19,8 +19,21 @@ def _load_py_module(fname, pkg="lightning_utilities"): about = _load_py_module("__about__.py") -with open(os.path.join(_PATH_REQUIRE, "cli.txt")) as fp: - requirements_cli = list(map(str, parse_requirements(fp.readline()))) + +# load basic requirements +with open(os.path.join(_PATH_REQUIRE, "base.txt")) as fp: + requirements = list(map(str, parse_requirements(fp.readline()))) + +# make extras as automated loading +requirements_extra = {} +for fpath in glob.glob(os.path.join(_PATH_REQUIRE, "*.txt")): + if os.path.basename(fpath) == "base.txt": + continue + name, _ = os.path.splitext(os.path.basename(fpath)) + with open(fpath) as fp: + requirements_extra[name] = list(map(str, parse_requirements(fp.readline()))) + +# loading readme as description with open(os.path.join(_PATH_ROOT, "README.md")) as fp: readme = fp.read() @@ -42,10 +55,8 @@ def _load_py_module(fname, pkg="lightning_utilities"): keywords=["Utilities", "DevOps", "CI/CD"], python_requires=">=3.7", setup_requires=[], - install_requires=[], - extras_require={ - "cli": requirements_cli, - }, + install_requires=requirements, + extras_require=requirements_extra, project_urls={ "Bug Tracker": "https://github.com/Lightning-AI/utilities/issues", "Documentation": "https://dev-toolbox.rtfd.io/en/latest/", # TODO: Update domain diff --git a/src/lightning_utilities/__about__.py b/src/lightning_utilities/__about__.py index 82e6dd30..f9d19519 100644 --- a/src/lightning_utilities/__about__.py +++ b/src/lightning_utilities/__about__.py @@ -1,6 +1,6 @@ import time -__version__ = "0.4.0" +__version__ = "0.4.1" __author__ = "Lightning AI et al." __author_email__ = "pytorch@lightning.ai" __license__ = "Apache-2.0" diff --git a/src/lightning_utilities/core/imports.py b/src/lightning_utilities/core/imports.py index c03d3706..6c242cb8 100644 --- a/src/lightning_utilities/core/imports.py +++ b/src/lightning_utilities/core/imports.py @@ -4,7 +4,6 @@ import importlib import operator from functools import lru_cache -from importlib import metadata from importlib.util import find_spec from typing import Callable @@ -12,6 +11,12 @@ from packaging.requirements import Requirement from packaging.version import Version +try: + from importlib import metadata +except ImportError: + # Python < 3.8 + import importlib_metadata as metadata # type: ignore + @lru_cache() def package_available(package_name: str) -> bool: diff --git a/tests/unittests/core/test_imports.py b/tests/unittests/core/test_imports.py index 26c0b95b..4322ab97 100644 --- a/tests/unittests/core/test_imports.py +++ b/tests/unittests/core/test_imports.py @@ -1,6 +1,5 @@ import operator import re -from importlib.metadata import PackageNotFoundError import pytest @@ -11,6 +10,12 @@ RequirementCache, ) +try: + from importlib.metadata import PackageNotFoundError +except ImportError: + # Python < 3.8 + from importlib_metadata import PackageNotFoundError + def test_module_exists(): assert module_available("_pytest")