diff --git a/poetry/core/version/pep440/parser.py b/poetry/core/version/pep440/parser.py index 5fb357094..08962c53a 100644 --- a/poetry/core/version/pep440/parser.py +++ b/poetry/core/version/pep440/parser.py @@ -56,7 +56,7 @@ def _get_local(cls, match: Optional[Match[AnyStr]]) -> Optional[LocalSegmentType return None return tuple( - part.lower() if not part.isdigit() else int(part) + part.lower() for part in cls._local_version_separators.split(match.group("local")) ) diff --git a/poetry/core/version/pep440/version.py b/poetry/core/version/pep440/version.py index d46a93822..2837bd195 100644 --- a/poetry/core/version/pep440/version.py +++ b/poetry/core/version/pep440/version.py @@ -81,7 +81,9 @@ def _make_compare_key(self): # - Shorter versions sort before longer versions when the prefixes # match exactly _local = tuple( - (i, "") if isinstance(i, int) else (-math.inf, i) for i in self.local + # We typecast strings that are integers so that they can be compared + (int(i), "") if str(i).isnumeric() else (-math.inf, i) + for i in self.local ) return self.epoch, self.release, _pre, _post, _dev, _local diff --git a/tests/version/test_version_pep440.py b/tests/version/test_version_pep440.py index 11b873dac..029b5f5dc 100644 --- a/tests/version/test_version_pep440.py +++ b/tests/version/test_version_pep440.py @@ -150,6 +150,14 @@ def test_pep440_release_tag_next(phase): "1.2.3.rc1", PEP440Version(release=Release.from_parts(1, 2, 3), pre=ReleaseTag("rc", 1)), ), + ( + "2.2.0dev0+build.05669607", + PEP440Version( + release=Release.from_parts(2, 2, 0), + dev=ReleaseTag("dev", 0), + local=("build", "05669607"), + ), + ), ], ) def test_pep440_parse_text(text, result):