mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
CHange ireq.satisfied_by to abstract distribution
This commit is contained in:
parent
62b91dfbf1
commit
c54d40474a
6 changed files with 13 additions and 27 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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])
|
||||
|
|
Loading…
Reference in a new issue