fix: StrictVersion fails to parse semver pre-release versions (e.g. "0.6.2-b1")

Enhance version parsing to handle semver pre-release suffixes and legacy 4-part dot notation.
This commit is contained in:
Razorback 2026-02-28 22:09:59 +08:00 committed by GitHub
parent d7aad369a4
commit 8b5ebfc51e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -109,7 +109,14 @@ class StrictVersion:
self.parse_version_string()
def parse_version_string(self):
parts = self.version_string.split('.')
# Handle semver pre-release suffix: "1.2.3-beta.1" → core="1.2.3", pre="beta.1"
core = self.version_string
if '-' in core:
dash_pos = core.index('-')
self.pre_release = core[dash_pos + 1:]
core = core[:dash_pos]
parts = core.split('.')
if not parts:
raise ValueError("Version string must not be empty")
@ -117,8 +124,8 @@ class StrictVersion:
self.minor = int(parts[1]) if len(parts) > 1 else 0
self.patch = int(parts[2]) if len(parts) > 2 else 0
# Handling pre-release versions if present
if len(parts) > 3:
# Also handle legacy 4-part dot notation: "1.2.3.beta1"
if self.pre_release is None and len(parts) > 3:
self.pre_release = parts[3]
def __str__(self):
@ -630,4 +637,4 @@ def restore_pip_snapshot(pips, options):
if res != 0:
failed.append(x)
print(f"Installation failed for pip packages: {failed}")
print(f"Installation failed for pip packages: {failed}")