diff --git a/news/9e768673-6079-491e-bbe0-d1593952f1c7.trivial.rst b/news/9e768673-6079-491e-bbe0-d1593952f1c7.trivial.rst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/pip/_internal/metadata/pkg_resources.py b/src/pip/_internal/metadata/pkg_resources.py index 5cd9eaee641..81fc35c0ff0 100644 --- a/src/pip/_internal/metadata/pkg_resources.py +++ b/src/pip/_internal/metadata/pkg_resources.py @@ -4,6 +4,7 @@ from pip._vendor import pkg_resources from pip._vendor.packaging.utils import canonicalize_name from pip._vendor.packaging.version import _BaseVersion +from pip._vendor.packaging.version import parse as parse_version from pip._internal.utils import misc # TODO: Move definition here. from pip._internal.utils.packaging import get_installer @@ -45,7 +46,7 @@ def canonical_name(self): @property def version(self): # type: () -> _BaseVersion - return self._dist.parsed_version + return parse_version(self._dist.version) @property def installer(self): diff --git a/src/pip/_internal/resolution/resolvelib/candidates.py b/src/pip/_internal/resolution/resolvelib/candidates.py index 035e118d022..cb3a51b51fc 100644 --- a/src/pip/_internal/resolution/resolvelib/candidates.py +++ b/src/pip/_internal/resolution/resolvelib/candidates.py @@ -5,6 +5,7 @@ from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet from pip._vendor.packaging.utils import canonicalize_name from pip._vendor.packaging.version import Version, _BaseVersion +from pip._vendor.packaging.version import parse as parse_version from pip._vendor.pkg_resources import Distribution from pip._internal.exceptions import HashError, MetadataInconsistent @@ -180,7 +181,7 @@ def name(self): def version(self): # type: () -> _BaseVersion if self._version is None: - self._version = self.dist.parsed_version + self._version = parse_version(self.dist.version) return self._version def format_for_error(self): @@ -206,7 +207,8 @@ def _check_metadata_consistency(self, dist): self._name, dist.project_name, ) - if self._version is not None and self._version != dist.parsed_version: + parsed_version = parse_version(dist.version) + if self._version is not None and self._version != parsed_version: raise MetadataInconsistent( self._ireq, "version", @@ -387,7 +389,7 @@ def name(self): @property def version(self): # type: () -> _BaseVersion - return self.dist.parsed_version + return parse_version(self.dist.version) @property def is_editable(self): diff --git a/src/pip/_internal/resolution/resolvelib/resolver.py b/src/pip/_internal/resolution/resolvelib/resolver.py index eba441091b6..7826cfc0fab 100644 --- a/src/pip/_internal/resolution/resolvelib/resolver.py +++ b/src/pip/_internal/resolution/resolvelib/resolver.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple from pip._vendor.packaging.utils import canonicalize_name +from pip._vendor.packaging.version import parse as parse_version from pip._vendor.resolvelib import ResolutionImpossible from pip._vendor.resolvelib import Resolver as RLResolver from pip._vendor.resolvelib.resolvers import Result @@ -139,7 +140,7 @@ def resolve(self, root_reqs, check_supported_wheels): elif self.factory.force_reinstall: # The --force-reinstall flag is set -- reinstall. ireq.should_reinstall = True - elif installed_dist.parsed_version != candidate.version: + elif parse_version(installed_dist.version) != candidate.version: # The installation is different in version -- reinstall. ireq.should_reinstall = True elif candidate.is_editable or dist_is_editable(installed_dist):