Skip to content

Commit 6357c8e

Browse files
committed
Prepare lazy wheels more so they are downloaded
This keeps all knowledge about preparation and types of requirements in `RequirementPreparer`, so there's one place to look when we're ready to start breaking it apart later.
1 parent 60db929 commit 6357c8e

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

src/pip/_internal/operations/prepare.py

+14
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,21 @@ def prepare_linked_requirement(self, req, parallel_builds=False):
486486
self._log_preparing_link(req)
487487
wheel_dist = self._fetch_metadata(link)
488488
if wheel_dist is not None:
489+
req.needs_more_preparation = True
489490
return wheel_dist
491+
return self._prepare_linked_requirement(req, parallel_builds)
492+
493+
def prepare_linked_requirement_more(self, req, parallel_builds=False):
494+
# type: (InstallRequirement, bool) -> None
495+
"""Prepare a linked requirement more, if needed."""
496+
if not req.needs_more_preparation:
497+
return
498+
self._prepare_linked_requirement(req, parallel_builds)
499+
500+
def _prepare_linked_requirement(self, req, parallel_builds):
501+
# type: (InstallRequirement, bool) -> Distribution
502+
assert req.link
503+
link = req.link
490504
if link.is_wheel and self.wheel_download_dir:
491505
# Download wheels to a dedicated dir when doing `pip wheel`.
492506
download_dir = self.wheel_download_dir

src/pip/_internal/req/req_install.py

+3
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,9 @@ def __init__(
213213
# but after loading this flag should be treated as read only.
214214
self.use_pep517 = use_pep517
215215

216+
# This requirement needs more preparation before it can be built
217+
self.needs_more_preparation = False
218+
216219
def __str__(self):
217220
# type: () -> str
218221
if self.req:

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

+3
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ def resolve(self, root_reqs, check_supported_wheels):
159159

160160
req_set.add_named_requirement(ireq)
161161

162+
for actual_req in req_set.all_requirements:
163+
self.factory.preparer.prepare_linked_requirement_more(actual_req)
164+
162165
return req_set
163166

164167
def get_installation_order(self, req_set):

0 commit comments

Comments
 (0)