|
13 | 13 | from datetime import datetime |
14 | 14 | from pathlib import Path |
15 | 15 | from pprint import pformat |
16 | | -from typing import Any, Callable |
| 16 | +from typing import TYPE_CHECKING, Any, Callable |
17 | 17 |
|
18 | | -from packaging.version import Version |
19 | | -from setuptools.dist import Distribution |
| 18 | +if TYPE_CHECKING: |
| 19 | + # avoid importing 'packaging' because setuptools-git-versioning can be installed using sdist |
| 20 | + # without this package installed |
| 21 | + from packaging.version import Version |
| 22 | + |
| 23 | + # used only for mypy check |
| 24 | + from setuptools.dist import Distribution |
20 | 25 |
|
21 | 26 | DEFAULT_TEMPLATE = "{tag}" |
22 | 27 | DEFAULT_DEV_TEMPLATE = "{tag}.post{ccount}+git.{sha}" |
@@ -480,6 +485,8 @@ def _get_version_from_callback( |
480 | 485 |
|
481 | 486 |
|
482 | 487 | def _sanitize_version(version: str) -> str: |
| 488 | + from packaging.version import Version |
| 489 | + |
483 | 490 | log.log(INFO, "Before sanitization %r", version) |
484 | 491 |
|
485 | 492 | public, sep, local = version.partition("+") |
@@ -524,7 +531,7 @@ def version_from_git( |
524 | 531 | if line.startswith("Version:"): |
525 | 532 | result = line[8:].strip() |
526 | 533 | log.log(INFO, "Return %r", result) |
527 | | - return _sanitize_version(result) |
| 534 | + return result |
528 | 535 |
|
529 | 536 | if version_callback is not None: |
530 | 537 | if version_file is not None: |
@@ -638,6 +645,8 @@ def version_from_git( |
638 | 645 |
|
639 | 646 |
|
640 | 647 | def get_version(config: dict | None = None, root: str | os.PathLike | None = None) -> Version: |
| 648 | + from packaging.version import Version |
| 649 | + |
641 | 650 | if not config: |
642 | 651 | log.log(INFO, "No explicit config passed") |
643 | 652 | log.log(INFO, "Searching for config files in '%s' folder", root or os.getcwd()) |
|
0 commit comments