Skip to content

Commit c54d404

Browse files
committed
CHange ireq.satisfied_by to abstract distribution
1 parent 62b91df commit c54d404

File tree

6 files changed

+13
-27
lines changed

6 files changed

+13
-27
lines changed

src/pip/_internal/distributions/installed.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ class InstalledDistribution(AbstractDistribution):
1111
"""
1212

1313
def get_metadata_distribution(self) -> BaseDistribution:
14-
from pip._internal.metadata.pkg_resources import Distribution as _Dist
15-
1614
assert self.req.satisfied_by is not None, "not actually installed"
17-
return _Dist(self.req.satisfied_by)
15+
return self.req.satisfied_by
1816

1917
def prepare_distribution_metadata(
2018
self, finder: PackageFinder, build_isolation: bool

src/pip/_internal/index/package_finder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ def find_requirement(
881881

882882
installed_version: Optional[_BaseVersion] = None
883883
if req.satisfied_by is not None:
884-
installed_version = parse_version(req.satisfied_by.version)
884+
installed_version = req.satisfied_by.version
885885

886886
def _format_versions(cand_iter: Iterable[InstallationCandidate]) -> str:
887887
# This repeated parse_version and str() conversion is needed to

src/pip/_internal/req/req_install.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from pip._vendor.packaging.version import Version
1919
from pip._vendor.packaging.version import parse as parse_version
2020
from pip._vendor.pep517.wrappers import Pep517HookCaller
21-
from pip._vendor.pkg_resources import Distribution
2221

2322
from pip._internal.build_env import BuildEnvironment, NoOpBuildEnvironment
2423
from pip._internal.exceptions import InstallationError
@@ -54,7 +53,6 @@
5453
display_path,
5554
dist_in_site_packages,
5655
dist_in_usersite,
57-
get_distribution,
5856
hide_url,
5957
redact_auth_from_url,
6058
)
@@ -132,7 +130,7 @@ def __init__(
132130

133131
# This holds the pkg_resources.Distribution object if this requirement
134132
# is already available:
135-
self.satisfied_by: Optional[Distribution] = None
133+
self.satisfied_by: Optional[BaseDistribution] = None
136134
# Whether the installation process should try to uninstall an existing
137135
# distribution before installing this requirement.
138136
self.should_reinstall = False
@@ -393,18 +391,13 @@ def check_if_exists(self, use_user_site: bool) -> None:
393391
"""
394392
if self.req is None:
395393
return
396-
existing_dist = get_distribution(self.req.name)
394+
existing_dist = get_default_environment().get_distribution(self.req.name)
397395
if not existing_dist:
398396
return
399397

400-
# pkg_resources may contain a different copy of packaging.version from
401-
# pip in if the downstream distributor does a poor job debundling pip.
402-
# We avoid existing_dist.parsed_version and let SpecifierSet.contains
403-
# parses the version instead.
404-
existing_version = existing_dist.version
405-
version_compatible = (
406-
existing_version is not None
407-
and self.req.specifier.contains(existing_version, prereleases=True)
398+
version_compatible = self.req.specifier.contains(
399+
existing_dist.version,
400+
prereleases=True,
408401
)
409402
if not version_compatible:
410403
self.satisfied_by = None

src/pip/_internal/resolution/legacy/resolver.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
from pip._internal.resolution.base import BaseResolver, InstallRequirementProvider
4444
from pip._internal.utils.compatibility_tags import get_supported
4545
from pip._internal.utils.logging import indent_log
46-
from pip._internal.utils.misc import dist_in_usersite, normalize_version_info
46+
from pip._internal.utils.misc import normalize_version_info
4747
from pip._internal.utils.packaging import check_requires_python
4848

4949
logger = logging.getLogger(__name__)
@@ -203,7 +203,7 @@ def _set_req_to_reinstall(self, req: InstallRequirement) -> None:
203203
"""
204204
# Don't uninstall the conflict if doing a user install and the
205205
# conflict is not a user install.
206-
if not self.use_user_site or dist_in_usersite(req.satisfied_by):
206+
if not self.use_user_site or req.satisfied_by.in_usersite:
207207
req.should_reinstall = True
208208
req.satisfied_by = None
209209

src/pip/_internal/resolution/resolvelib/candidates.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,6 @@ def make_install_req_from_editable(
9494
def _make_install_req_from_dist(
9595
dist: BaseDistribution, template: InstallRequirement
9696
) -> InstallRequirement:
97-
from pip._internal.metadata.pkg_resources import Distribution as _Dist
98-
9997
if template.req:
10098
line = str(template.req)
10199
elif template.link:
@@ -115,7 +113,7 @@ def _make_install_req_from_dist(
115113
hashes=template.hash_options,
116114
),
117115
)
118-
ireq.satisfied_by = cast(_Dist, dist)._dist
116+
ireq.satisfied_by = dist
119117
return ireq
120118

121119

tests/unit/test_finder.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,7 @@ def test_finder_detects_latest_already_satisfied_find_links(data: TestData) -> N
8686
latest_version = "3.0"
8787
satisfied_by = Mock(
8888
location="/path",
89-
parsed_version=parse_version(latest_version),
90-
version=latest_version,
89+
version=parse_version(latest_version),
9190
)
9291
req.satisfied_by = satisfied_by
9392
finder = make_test_finder(find_links=[data.find_links])
@@ -104,8 +103,7 @@ def test_finder_detects_latest_already_satisfied_pypi_links() -> None:
104103
latest_version = "0.3.1"
105104
satisfied_by = Mock(
106105
location="/path",
107-
parsed_version=parse_version(latest_version),
108-
version=latest_version,
106+
version=parse_version(latest_version),
109107
)
110108
req.satisfied_by = satisfied_by
111109
finder = make_test_finder(index_urls=["http://pypi.org/simple/"])
@@ -185,8 +183,7 @@ def test_existing_over_wheel_priority(self, data: TestData) -> None:
185183
latest_version = "1.0"
186184
satisfied_by = Mock(
187185
location="/path",
188-
parsed_version=parse_version(latest_version),
189-
version=latest_version,
186+
version=parse_version(latest_version),
190187
)
191188
req.satisfied_by = satisfied_by
192189
finder = make_test_finder(find_links=[data.find_links])

0 commit comments

Comments
 (0)