|
11 | 11 | from typing import TYPE_CHECKING, Any, cast, no_type_check |
12 | 12 | from zipfile import ZipFile |
13 | 13 |
|
| 14 | +from packaging.version import InvalidVersion |
| 15 | + |
14 | 16 | from pdm import termui |
15 | 17 | from pdm.builders import EditableBuilder, WheelBuilder |
16 | 18 | from pdm.compat import importlib_metadata as im |
17 | | -from pdm.exceptions import BuildError, CandidateNotFound, InvalidPyVersion, PDMWarning |
| 19 | +from pdm.exceptions import BuildError, CandidateNotFound, InvalidPyVersion, PDMWarning, RequirementError |
18 | 20 | from pdm.models.backends import get_backend, get_backend_by_spec |
19 | 21 | from pdm.models.reporter import BaseReporter |
20 | 22 | from pdm.models.requirements import ( |
@@ -242,7 +244,10 @@ def as_lockfile_entry(self, project_root: Path) -> dict[str, Any]: |
242 | 244 | """Build a lockfile entry dictionary for the candidate.""" |
243 | 245 | version = str(self.version) |
244 | 246 | if not self.req.is_pinned: |
245 | | - version = str(comparable_version(version)) |
| 247 | + try: |
| 248 | + version = str(comparable_version(version)) |
| 249 | + except InvalidVersion as e: |
| 250 | + raise RequirementError(f"Invalid version for {self.req.as_line()}: {e}") from None |
246 | 251 | result = { |
247 | 252 | "name": normalize_name(self.name), |
248 | 253 | "version": version, |
|
0 commit comments