CHange ireq.satisfied_by to abstract distribution

This commit is contained in:
Tzu-ping Chung 2021-09-28 17:42:19 +08:00
parent 62b91dfbf1
commit c54d40474a
6 changed files with 13 additions and 27 deletions

View File

@ -11,10 +11,8 @@ class InstalledDistribution(AbstractDistribution):
"""
def get_metadata_distribution(self) -> BaseDistribution:
from pip._internal.metadata.pkg_resources import Distribution as _Dist
assert self.req.satisfied_by is not None, "not actually installed"
return _Dist(self.req.satisfied_by)
return self.req.satisfied_by
def prepare_distribution_metadata(
self, finder: PackageFinder, build_isolation: bool

View File

@ -881,7 +881,7 @@ class PackageFinder:
installed_version: Optional[_BaseVersion] = None
if req.satisfied_by is not None:
installed_version = parse_version(req.satisfied_by.version)
installed_version = req.satisfied_by.version
def _format_versions(cand_iter: Iterable[InstallationCandidate]) -> str:
# This repeated parse_version and str() conversion is needed to

View File

@ -18,7 +18,6 @@ from pip._vendor.packaging.utils import canonicalize_name
from pip._vendor.packaging.version import Version
from pip._vendor.packaging.version import parse as parse_version
from pip._vendor.pep517.wrappers import Pep517HookCaller
from pip._vendor.pkg_resources import Distribution
from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment
from pip._internal.exceptions import InstallationError
@ -54,7 +53,6 @@ from pip._internal.utils.misc import (
display_path,
dist_in_site_packages,
dist_in_usersite,
get_distribution,
hide_url,
redact_auth_from_url,
)
@ -132,7 +130,7 @@ class InstallRequirement:
# This holds the pkg_resources.Distribution object if this requirement
# is already available:
self.satisfied_by: Optional[Distribution] = None
self.satisfied_by: Optional[BaseDistribution] = None
# Whether the installation process should try to uninstall an existing
# distribution before installing this requirement.
self.should_reinstall = False
@ -393,18 +391,13 @@ class InstallRequirement:
"""
if self.req is None:
return
existing_dist = get_distribution(self.req.name)
existing_dist = get_default_environment().get_distribution(self.req.name)
if not existing_dist:
return
# pkg_resources may contain a different copy of packaging.version from
# pip in if the downstream distributor does a poor job debundling pip.
# We avoid existing_dist.parsed_version and let SpecifierSet.contains
# parses the version instead.
existing_version = existing_dist.version
version_compatible = (
existing_version is not None
and self.req.specifier.contains(existing_version, prereleases=True)
version_compatible = self.req.specifier.contains(
existing_dist.version,
prereleases=True,
)
if not version_compatible:
self.satisfied_by = None

View File

@ -43,7 +43,7 @@ from pip._internal.req.req_set import RequirementSet
from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider
from pip._internal.utils.compatibility_tags import get_supported
from pip._internal.utils.logging import indent_log
from pip._internal.utils.misc import dist_in_usersite, normalize_version_info
from pip._internal.utils.misc import normalize_version_info
from pip._internal.utils.packaging import check_requires_python
logger = logging.getLogger(__name__)
@ -203,7 +203,7 @@ class Resolver(BaseResolver):
"""
# Don't uninstall the conflict if doing a user install and the
# conflict is not a user install.
if not self.use_user_site or dist_in_usersite(req.satisfied_by):
if not self.use_user_site or req.satisfied_by.in_usersite:
req.should_reinstall = True
req.satisfied_by = None

View File

@ -94,8 +94,6 @@ def make_install_req_from_editable(
def _make_install_req_from_dist(
dist: BaseDistribution, template: InstallRequirement
) -> InstallRequirement:
from pip._internal.metadata.pkg_resources import Distribution as _Dist
if template.req:
line = str(template.req)
elif template.link:
@ -115,7 +113,7 @@ def _make_install_req_from_dist(
hashes=template.hash_options,
),
)
ireq.satisfied_by = cast(_Dist, dist)._dist
ireq.satisfied_by = dist
return ireq

View File

@ -86,8 +86,7 @@ def test_finder_detects_latest_already_satisfied_find_links(data: TestData) -> N
latest_version = "3.0"
satisfied_by = Mock(
location="/path",
parsed_version=parse_version(latest_version),
version=latest_version,
version=parse_version(latest_version),
)
req.satisfied_by = satisfied_by
finder = make_test_finder(find_links=[data.find_links])
@ -104,8 +103,7 @@ def test_finder_detects_latest_already_satisfied_pypi_links() -> None:
latest_version = "0.3.1"
satisfied_by = Mock(
location="/path",
parsed_version=parse_version(latest_version),
version=latest_version,
version=parse_version(latest_version),
)
req.satisfied_by = satisfied_by
finder = make_test_finder(index_urls=["http://pypi.org/simple/"])
@ -185,8 +183,7 @@ class TestWheel:
latest_version = "1.0"
satisfied_by = Mock(
location="/path",
parsed_version=parse_version(latest_version),
version=latest_version,
version=parse_version(latest_version),
)
req.satisfied_by = satisfied_by
finder = make_test_finder(find_links=[data.find_links])