Skip to content

Commit f123312

Browse files
committed
Defer import error for packaging.licenses in environments with packagin<24.2
1 parent 70ecc10 commit f123312

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

setuptools/_normalization.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,21 @@ def safer_best_effort_version(value: str) -> str:
148148
# See bdist_wheel.safer_verion
149149
# TODO: Replace with only safe_version in the future (no need for best effort)
150150
return filename_component(best_effort_version(value))
151+
152+
153+
try:
154+
from packaging.licenses import (
155+
canonicalize_license_expression as _canonicalize_license_expression,
156+
)
157+
except ImportError:
158+
159+
def _canonicalize_license_expression(expression: str) -> str:
160+
# Defer import error to affect only users that actually use it
161+
# https://github.com/pypa/setuptools/issues/4894
162+
raise ImportError(
163+
"Cannot import `packaging.licenses`."
164+
"""
165+
Setuptools>=77.0.0 requires "packaging>=24.2" to work properly.
166+
Please make sure you have a suitable version installed.
167+
"""
168+
)

setuptools/dist.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from typing import TYPE_CHECKING, Any, Union
1313

1414
from more_itertools import partition, unique_everseen
15-
from packaging.licenses import canonicalize_license_expression
1615
from packaging.markers import InvalidMarker, Marker
1716
from packaging.specifiers import InvalidSpecifier, SpecifierSet
1817
from packaging.version import Version
@@ -24,6 +23,7 @@
2423
command as _, # noqa: F401 # imported for side-effects
2524
)
2625
from ._importlib import metadata
26+
from ._normalization import _canonicalize_license_expression
2727
from ._path import StrPath
2828
from ._reqs import _StrOrIter
2929
from .config import pyprojecttoml, setupcfg
@@ -423,7 +423,7 @@ def _finalize_license_expression(self) -> None:
423423
license_expr = self.metadata.license_expression
424424
if license_expr:
425425
str_ = _static.Str if _static.is_static(license_expr) else str
426-
normalized = str_(canonicalize_license_expression(license_expr))
426+
normalized = str_(_canonicalize_license_expression(license_expr))
427427
if license_expr != normalized:
428428
InformationOnly.emit(f"Normalizing '{license_expr}' to '{normalized}'")
429429
self.metadata.license_expression = normalized

0 commit comments

Comments
 (0)