|
18 | 18 | from pip._vendor.packaging import specifiers |
19 | 19 | from pip._vendor.packaging.tags import Tag |
20 | 20 | from pip._vendor.packaging.utils import NormalizedName, canonicalize_name |
21 | | -from pip._vendor.packaging.version import InvalidVersion, _BaseVersion |
| 21 | +from pip._vendor.packaging.version import InvalidVersion, Version, _BaseVersion |
22 | 22 | from pip._vendor.packaging.version import parse as parse_version |
23 | 23 |
|
24 | 24 | from pip._internal.exceptions import ( |
|
28 | 28 | UnsupportedWheel, |
29 | 29 | ) |
30 | 30 | from pip._internal.index.collector import LinkCollector, parse_links |
| 31 | +from pip._internal.metadata import select_backend |
31 | 32 | from pip._internal.models.candidate import InstallationCandidate |
32 | 33 | from pip._internal.models.format_control import FormatControl |
33 | 34 | from pip._internal.models.link import Link |
@@ -458,14 +459,19 @@ def get_applicable_candidates( |
458 | 459 | allow_prereleases = self._allow_all_prereleases or None |
459 | 460 | specifier = self._specifier |
460 | 461 |
|
461 | | - # We turn the version object into a str here because otherwise |
462 | | - # when we're debundled but setuptools isn't, Python will see |
463 | | - # packaging.version.Version and |
| 462 | + # When using the pkg_resources backend we turn the version object into |
| 463 | + # a str here because otherwise when we're debundled but setuptools isn't, |
| 464 | + # Python will see packaging.version.Version and |
464 | 465 | # pkg_resources._vendor.packaging.version.Version as different |
465 | 466 | # types. This way we'll use a str as a common data interchange |
466 | 467 | # format. If we stop using the pkg_resources provided specifier |
467 | 468 | # and start using our own, we can drop the cast to str(). |
468 | | - candidates_and_versions = [(c, str(c.version)) for c in candidates] |
| 469 | + if select_backend().NAME == "pkg_resources": |
| 470 | + candidates_and_versions: list[ |
| 471 | + tuple[InstallationCandidate, str | Version] |
| 472 | + ] = [(c, str(c.version)) for c in candidates] |
| 473 | + else: |
| 474 | + candidates_and_versions = [(c, c.version) for c in candidates] |
469 | 475 | versions = set( |
470 | 476 | specifier.filter( |
471 | 477 | (v for _, v in candidates_and_versions), |
|
0 commit comments