Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
RequirementPreparer Class Reference

Public Member Functions

None __init__ (self, str build_dir, Optional[str] download_dir, str src_dir, bool build_isolation, bool check_build_deps, BuildTracker build_tracker, PipSession session, str progress_bar, PackageFinder finder, bool require_hashes, bool use_user_site, bool lazy_wheel, int verbosity, bool legacy_resolver)
 
BaseDistribution prepare_linked_requirement (self, InstallRequirement req, bool parallel_builds=False)
 
None prepare_linked_requirements_more (self, Iterable[InstallRequirement] reqs, bool parallel_builds=False)
 
None save_linked_requirement (self, InstallRequirement req)
 
BaseDistribution prepare_editable_requirement (self, InstallRequirement req)
 
BaseDistribution prepare_installed_requirement (self, InstallRequirement req, str skip_reason)
 

Data Fields

 src_dir
 
 build_dir
 
 build_tracker
 
 finder
 
 download_dir
 
 build_isolation
 
 check_build_deps
 
 require_hashes
 
 use_user_site
 
 use_lazy_wheel
 
 verbosity
 
 legacy_resolver
 

Protected Member Functions

None _log_preparing_link (self, InstallRequirement req)
 
None _ensure_link_req_src_dir (self, InstallRequirement req, bool parallel_builds)
 
Hashes _get_linked_req_hashes (self, InstallRequirement req)
 
Optional[BaseDistribution_fetch_metadata_only (self, InstallRequirement req)
 
Optional[BaseDistribution_fetch_metadata_using_link_data_attr (self, InstallRequirement req)
 
Optional[BaseDistribution_fetch_metadata_using_lazy_wheel (self, Link link)
 
None _complete_partial_requirements (self, Iterable[InstallRequirement] partially_downloaded_reqs, bool parallel_builds=False)
 
BaseDistribution _prepare_linked_requirement (self, InstallRequirement req, bool parallel_builds)
 

Protected Attributes

 _session
 
 _download
 
 _batch_download
 
 _previous_requirement_header
 

Detailed Description

Prepares a Requirement

Definition at line 211 of file prepare.py.

Constructor & Destructor Documentation

◆ __init__()

None __init__ (   self,
str  build_dir,
Optional[str]  download_dir,
str  src_dir,
bool  build_isolation,
bool  check_build_deps,
BuildTracker  build_tracker,
PipSession  session,
str  progress_bar,
PackageFinder  finder,
bool  require_hashes,
bool  use_user_site,
bool  lazy_wheel,
int  verbosity,
bool  legacy_resolver 
)

Definition at line 214 of file prepare.py.

230 ) -> None:
231 super().__init__()
232
233 self.src_dir = src_dir
234 self.build_dir = build_dir
235 self.build_tracker = build_tracker
236 self._session = session
237 self._download = Downloader(session, progress_bar)
238 self._batch_download = BatchDownloader(session, progress_bar)
239 self.finder = finder
240
241 # Where still-packed archives should be written to. If None, they are
242 # not saved, and are deleted immediately after unpacking.
243 self.download_dir = download_dir
244
245 # Is build isolation allowed?
246 self.build_isolation = build_isolation
247
248 # Should check build dependencies?
249 self.check_build_deps = check_build_deps
250
251 # Should hash-checking be required?
252 self.require_hashes = require_hashes
253
254 # Should install in user site-packages?
255 self.use_user_site = use_user_site
256
257 # Should wheels be downloaded lazily?
258 self.use_lazy_wheel = lazy_wheel
259
260 # How verbose should underlying tooling be?
261 self.verbosity = verbosity
262
263 # Are we using the legacy resolver?
264 self.legacy_resolver = legacy_resolver
265
266 # Memoized downloaded files, as mapping of url: path.
267 self._downloaded: Dict[str, str] = {}
268
269 # Previous "header" printed for a link-based InstallRequirement
270 self._previous_requirement_header = ("", "")
271
for i

References RequirementPreparer.__init__(), and i.

Referenced by RequirementPreparer.__init__(), and Protocol.__init_subclass__().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Function Documentation

◆ _complete_partial_requirements()

None _complete_partial_requirements (   self,
Iterable[InstallRequirement partially_downloaded_reqs,
bool   parallel_builds = False 
)
protected
Download any requirements which were only fetched by metadata.

Definition at line 457 of file prepare.py.

461 ) -> None:
462 """Download any requirements which were only fetched by metadata."""
463 # Download to a temporary directory. These will be copied over as
464 # needed for downstream 'download', 'wheel', and 'install' commands.
465 temp_dir = TempDirectory(kind="unpack", globally_managed=True).path
466
467 # Map each link to the requirement that owns it. This allows us to set
468 # `req.local_file_path` on the appropriate requirement after passing
469 # all the links at once into BatchDownloader.
470 links_to_fully_download: Dict[Link, InstallRequirement] = {}
471 for req in partially_downloaded_reqs:
472 assert req.link
473 links_to_fully_download[req.link] = req
474
475 batch_download = self._batch_download(
477 temp_dir,
478 )
479 for link, (filepath, _) in batch_download:
480 logger.debug("Downloading link %s to %s", link, filepath)
481 req = links_to_fully_download[link]
482 req.local_file_path = filepath
483 # TODO: This needs fixing for sdists
484 # This is an emergency fix for #11847, which reports that
485 # distributions get downloaded twice when metadata is loaded
486 # from a PEP 658 standalone metadata file. Setting _downloaded
487 # fixes this for wheels, but breaks the sdist case (tests
488 # test_download_metadata). As PyPI is currently only serving
489 # metadata for wheels, this is not an immediate issue.
490 # Fixing the problem properly looks like it will require a
491 # complete refactoring of the `prepare_linked_requirements_more`
492 # logic, and I haven't a clue where to start on that, so for now
493 # I have fixed the issue *just* for wheels.
494 if req.is_wheel:
495 self._downloaded[req.link.url] = filepath
496
497 # This step is necessary to ensure all lazy wheels are processed
498 # successfully by the 'download', 'wheel', and 'install' commands.
499 for req in partially_downloaded_reqs:
500 self._prepare_linked_requirement(req, parallel_builds)
501

References RequirementPreparer._batch_download, RequirementPreparer._prepare_linked_requirement(), and i.

Referenced by RequirementPreparer.prepare_linked_requirements_more().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _ensure_link_req_src_dir()

None _ensure_link_req_src_dir (   self,
InstallRequirement  req,
bool   parallel_builds 
)
protected
Ensure source_dir of a linked InstallRequirement.

Definition at line 299 of file prepare.py.

301 ) -> None:
302 """Ensure source_dir of a linked InstallRequirement."""
303 # Since source_dir is only set for editable requirements.
305 # We don't need to unpack wheels, so no need for a source
306 # directory.
307 return
308 assert req.source_dir is None
310 # build local directories in-tree
312 return
313
314 # We always delete unpacked sdists after pip runs.
316 self.build_dir,
317 autodelete=True,
318 parallel_builds=parallel_builds,
319 )
320
321 # If a checkout exists, it's unwise to keep going. version
322 # inconsistencies are logged later, but do not fail the
323 # installation.
324 # FIXME: this won't upgrade when there's an existing
325 # package unpacked in `req.source_dir`
326 # TODO: this check is now probably dead code
327 if is_installable_dir(req.source_dir):
328 raise PreviousBuildDirError(
329 "pip can't proceed with requirements '{}' due to a"
330 "pre-existing build directory ({}). This is likely "
331 "due to a previous installation that failed . pip is "
332 "being responsible and not assuming it can delete this. "
333 "Please delete it and try again.".format(req, req.source_dir)
334 )
335

References RequirementPreparer.build_dir, and i.

Referenced by RequirementPreparer._prepare_linked_requirement().

Here is the caller graph for this function:

◆ _fetch_metadata_only()

Optional[BaseDistribution] _fetch_metadata_only (   self,
InstallRequirement  req 
)
protected

Definition at line 368 of file prepare.py.

371 ) -> Optional[BaseDistribution]:
372 if self.legacy_resolver:
374 "Metadata-only fetching is not used in the legacy resolver",
375 )
376 return None
377 if self.require_hashes:
379 "Metadata-only fetching is not used as hash checking is required",
380 )
381 return None
382 # Try PEP 658 metadata first, then fall back to lazy wheel if unavailable.
383 return self._fetch_metadata_using_link_data_attr(
384 req
385 ) or self._fetch_metadata_using_lazy_wheel(req.link)
386

References RequirementPreparer._fetch_metadata_using_lazy_wheel(), RequirementPreparer._fetch_metadata_using_link_data_attr(), i, RequirementPreparer.legacy_resolver, and RequirementPreparer.require_hashes.

Referenced by RequirementPreparer.prepare_linked_requirement().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _fetch_metadata_using_lazy_wheel()

Optional[BaseDistribution] _fetch_metadata_using_lazy_wheel (   self,
Link  link 
)
protected
Fetch metadata using lazy wheel, if possible.

Definition at line 428 of file prepare.py.

431 ) -> Optional[BaseDistribution]:
432 """Fetch metadata using lazy wheel, if possible."""
433 # --use-feature=fast-deps must be provided.
434 if not self.use_lazy_wheel:
435 return None
436 if link.is_file or not link.is_wheel:
438 "Lazy wheel is not used as %r does not point to a remote wheel",
439 link,
440 )
441 return None
442
443 wheel = Wheel(link.filename)
444 name = canonicalize_name(wheel.name)
446 "Obtaining dependency information from %s %s",
447 name,
449 )
450 url = link.url.split("#", 1)[0]
451 try:
452 return dist_from_wheel_url(name, url, self._session)
453 except HTTPRangeRequestUnsupported:
454 logger.debug("%s does not support range requests", url)
455 return None
456

References SessionCommandMixin._session, Downloader._session, BatchDownloader._session, LazyZipOverHTTP._session, PipXmlrpcTransport._session, RequirementPreparer._session, RequirementsFileParser._session, i, and RequirementPreparer.use_lazy_wheel.

Referenced by RequirementPreparer._fetch_metadata_only().

Here is the caller graph for this function:

◆ _fetch_metadata_using_link_data_attr()

Optional[BaseDistribution] _fetch_metadata_using_link_data_attr (   self,
InstallRequirement  req 
)
protected
Fetch metadata from the data-dist-info-metadata attribute, if possible.

Definition at line 387 of file prepare.py.

390 ) -> Optional[BaseDistribution]:
391 """Fetch metadata from the data-dist-info-metadata attribute, if possible."""
392 # (1) Get the link to the metadata file, if provided by the backend.
393 metadata_link = req.link.metadata_link()
394 if metadata_link is None:
395 return None
396 assert req.req is not None
398 "Obtaining dependency information for %s from %s",
399 req.req,
400 metadata_link,
401 )
402 # (2) Download the contents of the METADATA file, separate from the dist itself.
403 metadata_file = get_http_url(
404 metadata_link,
405 self._download,
407 )
408 with open(metadata_file.path, "rb") as f:
409 metadata_contents = f.read()
410 # (3) Generate a dist just from those file contents.
411 metadata_dist = get_metadata_distribution(
412 metadata_contents,
415 )
416 # (4) Ensure the Name: field from the METADATA file matches the name from the
417 # install requirement.
418 #
419 # NB: raw_name will fall back to the name from the install requirement if
420 # the Name: field is not present, but it's noted in the raw_name docstring
421 # that that should NEVER happen anyway.
422 if canonicalize_name(metadata_dist.raw_name) != canonicalize_name(req.req.name):
423 raise MetadataInconsistent(
425 )
426 return metadata_dist
427

References LazyZipOverHTTP._download(), RequirementPreparer._download, pip._internal.operations.prepare.get_http_url(), and i.

Referenced by RequirementPreparer._fetch_metadata_only().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _get_linked_req_hashes()

Hashes _get_linked_req_hashes (   self,
InstallRequirement  req 
)
protected

Definition at line 336 of file prepare.py.

336 def _get_linked_req_hashes(self, req: InstallRequirement) -> Hashes:
337 # By the time this is called, the requirement's link should have
338 # been checked so we can tell what kind of requirements req is
339 # and raise some more informative errors than otherwise.
340 # (For example, we can raise VcsHashUnsupported for a VCS URL
341 # rather than HashMissing.)
342 if not self.require_hashes:
343 return req.hashes(trust_internet=True)
344
345 # We could check these first 2 conditions inside unpack_url
346 # and save repetition of conditions, but then we would
347 # report less-useful error messages for unhashable
348 # requirements, complaining that there's no hash provided.
350 raise VcsHashUnsupported()
352 raise DirectoryUrlHashUnsupported()
353
354 # Unpinned packages are asking for trouble when a new version
355 # is uploaded. This isn't a security check, but it saves users
356 # a surprising hash mismatch in the future.
357 # file:/// URLs aren't pinnable, so don't complain about them
358 # not being pinned.
359 if not req.is_direct and not req.is_pinned:
360 raise HashUnpinned()
361
362 # If known-good hashes are missing for this requirement,
363 # shim it with a facade object that will provoke hash
364 # computation and then raise a HashMissing exception
365 # showing the user what the hash should be.
366 return req.hashes(trust_internet=False) or MissingHashes()
367

References i, and RequirementPreparer.require_hashes.

Referenced by RequirementPreparer._prepare_linked_requirement(), RequirementPreparer.prepare_linked_requirement(), and RequirementPreparer.prepare_linked_requirements_more().

Here is the caller graph for this function:

◆ _log_preparing_link()

None _log_preparing_link (   self,
InstallRequirement  req 
)
protected
Provide context for the requirement being prepared.

Definition at line 272 of file prepare.py.

272 def _log_preparing_link(self, req: InstallRequirement) -> None:
273 """Provide context for the requirement being prepared."""
275 message = "Processing %s"
276 information = str(display_path(req.link.file_path))
277 else:
278 message = "Collecting %s"
279 information = str(req.req or req)
280
281 # If we used req.req, inject requirement source if available (this
282 # would already be included if we used req directly)
283 if req.req and req.comes_from:
284 if isinstance(req.comes_from, str):
285 comes_from: Optional[str] = req.comes_from
286 else:
287 comes_from = req.comes_from.from_path()
288 if comes_from:
289 information += f" (from {comes_from})"
290
291 if (message, information) != self._previous_requirement_header:
292 self._previous_requirement_header = (message, information)
293 logger.info(message, information)
294
296 with indent_log():
297 logger.info("Using cached %s", req.link.filename)
298

References RequirementPreparer._previous_requirement_header, and i.

Referenced by RequirementPreparer.prepare_linked_requirement().

Here is the caller graph for this function:

◆ _prepare_linked_requirement()

BaseDistribution _prepare_linked_requirement (   self,
InstallRequirement  req,
bool   parallel_builds 
)
protected

Definition at line 570 of file prepare.py.

572 ) -> BaseDistribution:
573 assert req.link
574 link = req.link
575
576 hashes = self._get_linked_req_hashes(req)
577
578 if hashes and req.is_wheel_from_cache:
579 assert req.download_info is not None
580 assert link.is_wheel
581 assert link.is_file
582 # We need to verify hashes, and we have found the requirement in the cache
583 # of locally built wheels.
584 if (
588 ):
589 # At this point we know the requirement was built from a hashable source
590 # artifact, and we verified that the cache entry's hash of the original
591 # artifact matches one of the hashes we expect. We don't verify hashes
592 # against the cached wheel, because the wheel is not the original.
593 hashes = None
594 else:
596 "The hashes of the source archive found in cache entry "
597 "don't match, ignoring cached built wheel "
598 "and re-downloading source."
599 )
601 link = req.link
602
603 self._ensure_link_req_src_dir(req, parallel_builds)
604
606 local_file = None
607 elif link.url not in self._downloaded:
608 try:
609 local_file = unpack_url(
610 link,
612 self._download,
613 self.verbosity,
614 self.download_dir,
615 hashes,
616 )
617 except NetworkConnectionError as exc:
618 raise InstallationError(
619 "Could not install requirement {} because of HTTP "
620 "error {} for URL {}".format(req, exc, link)
621 )
622 else:
623 file_path = self._downloaded[link.url]
624 if hashes:
626 local_file = File(file_path, content_type=None)
627
628 # If download_info is set, we got it from the wheel cache.
629 if req.download_info is None:
630 # Editables don't go through this function (see
631 # prepare_editable_requirement).
632 assert not req.editable
633 req.download_info = direct_url_from_link(link, req.source_dir)
634 # Make sure we have a hash in download_info. If we got it as part of the
635 # URL, it will have been verified and we can rely on it. Otherwise we
636 # compute it from the downloaded file.
637 # FIXME: https://github.com/pypa/pip/issues/11943
638 if (
641 and local_file
642 ):
643 hash = hash_file(local_file.path)[0].hexdigest()
644 # We populate info.hash for backward compatibility.
645 # This will automatically populate info.hashes.
646 req.download_info.info.hash = f"sha256={hash}"
647
648 # For use in later processing,
649 # preserve the file path on the requirement.
650 if local_file:
652
653 dist = _get_prepared_distribution(
654 req,
655 self.build_tracker,
656 self.finder,
657 self.build_isolation,
658 self.check_build_deps,
659 )
660 return dist
661

References LazyZipOverHTTP._download(), RequirementPreparer._download, RequirementPreparer._ensure_link_req_src_dir(), RequirementPreparer._get_linked_req_hashes(), pip._internal.operations.prepare._get_prepared_distribution(), RequirementPreparer.build_isolation, RequirementPreparer.build_tracker, RequirementPreparer.check_build_deps, RequirementPreparer.download_dir, RequirementPreparer.finder, Resolver.finder, InstalledDistribution.finder, ResourceBase.finder, i, pip._internal.operations.prepare.unpack_url(), Command.verbosity, and RequirementPreparer.verbosity.

Referenced by RequirementPreparer._complete_partial_requirements(), RequirementPreparer.prepare_linked_requirement(), and RequirementPreparer.prepare_linked_requirements_more().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ prepare_editable_requirement()

BaseDistribution prepare_editable_requirement (   self,
InstallRequirement  req 
)
Prepare an editable requirement.

Definition at line 688 of file prepare.py.

691 ) -> BaseDistribution:
692 """Prepare an editable requirement."""
693 assert req.editable, "cannot prepare a non-editable req as editable"
694
695 logger.info("Obtaining %s", req)
696
697 with indent_log():
698 if self.require_hashes:
699 raise InstallationError(
700 "The editable requirement {} cannot be installed when "
701 "requiring hashes, because there is no single file to "
702 "hash.".format(req)
703 )
704 req.ensure_has_source_dir(self.src_dir)
706 assert req.source_dir
707 req.download_info = direct_url_for_editable(req.unpacked_source_directory)
708
709 dist = _get_prepared_distribution(
710 req,
711 self.build_tracker,
712 self.finder,
713 self.build_isolation,
714 self.check_build_deps,
715 )
716
717 req.check_if_exists(self.use_user_site)
718
719 return dist
720

References pip._internal.operations.prepare._get_prepared_distribution(), RequirementPreparer.build_isolation, RequirementPreparer.build_tracker, RequirementPreparer.check_build_deps, RequirementPreparer.finder, Resolver.finder, InstalledDistribution.finder, ResourceBase.finder, i, RequirementPreparer.require_hashes, RequirementPreparer.src_dir, RequirementPreparer.use_user_site, and Resolver.use_user_site.

Here is the call graph for this function:

◆ prepare_installed_requirement()

BaseDistribution prepare_installed_requirement (   self,
InstallRequirement  req,
str  skip_reason 
)
Prepare an already-installed requirement.

Definition at line 721 of file prepare.py.

725 ) -> BaseDistribution:
726 """Prepare an already-installed requirement."""
727 assert req.satisfied_by, "req should have been satisfied but isn't"
728 assert skip_reason is not None, (
729 "did not get skip reason skipped but req.satisfied_by "
730 "is set to {}".format(req.satisfied_by)
731 )
733 "Requirement %s: %s (%s)", skip_reason, req, req.satisfied_by.version
734 )
735 with indent_log():
736 if self.require_hashes:
738 "Since it is already installed, we are trusting this "
739 "package without checking its hash. To ensure a "
740 "completely repeatable environment, install into an "
741 "empty virtualenv."
742 )
743 return InstalledDistribution(req).get_metadata_distribution()

References i, and RequirementPreparer.require_hashes.

◆ prepare_linked_requirement()

BaseDistribution prepare_linked_requirement (   self,
InstallRequirement  req,
bool   parallel_builds = False 
)
Prepare a requirement to be obtained from req.link.

Definition at line 502 of file prepare.py.

504 ) -> BaseDistribution:
505 """Prepare a requirement to be obtained from req.link."""
506 assert req.link
507 self._log_preparing_link(req)
508 with indent_log():
509 # Check if the relevant file is already available
510 # in the download directory
511 file_path = None
512 if self.download_dir is not None and req.link.is_wheel:
513 hashes = self._get_linked_req_hashes(req)
514 file_path = _check_download_dir(
515 req.link,
516 self.download_dir,
517 hashes,
518 # When a locally built wheel has been found in cache, we don't warn
519 # about re-downloading when the already downloaded wheel hash does
520 # not match. This is because the hash must be checked against the
521 # original link, not the cached link. It that case the already
522 # downloaded file will be removed and re-fetched from cache (which
523 # implies a hash check against the cache entry's origin.json).
524 warn_on_hash_mismatch=not req.is_wheel_from_cache,
525 )
526
527 if file_path is not None:
528 # The file is already available, so mark it as downloaded
529 self._downloaded[req.link.url] = file_path
530 else:
531 # The file is not available, attempt to fetch only metadata
532 metadata_dist = self._fetch_metadata_only(req)
533 if metadata_dist is not None:
535 return metadata_dist
536
537 # None of the optimizations worked, fully prepare the requirement
538 return self._prepare_linked_requirement(req, parallel_builds)
539

References pip._internal.operations.prepare._check_download_dir(), RequirementPreparer._fetch_metadata_only(), RequirementPreparer._get_linked_req_hashes(), RequirementPreparer._log_preparing_link(), RequirementPreparer._prepare_linked_requirement(), RequirementPreparer.download_dir, and i.

Here is the call graph for this function:

◆ prepare_linked_requirements_more()

None prepare_linked_requirements_more (   self,
Iterable[InstallRequirement reqs,
bool   parallel_builds = False 
)
Prepare linked requirements more, if needed.

Definition at line 540 of file prepare.py.

542 ) -> None:
543 """Prepare linked requirements more, if needed."""
544 reqs = [req for req in reqs if req.needs_more_preparation]
545 for req in reqs:
546 # Determine if any of these requirements were already downloaded.
547 if self.download_dir is not None and req.link.is_wheel:
548 hashes = self._get_linked_req_hashes(req)
549 file_path = _check_download_dir(req.link, self.download_dir, hashes)
550 if file_path is not None:
551 self._downloaded[req.link.url] = file_path
553
554 # Prepare requirements we found were already downloaded for some
555 # reason. The other downloads will be completed separately.
556 partially_downloaded_reqs: List[InstallRequirement] = []
557 for req in reqs:
560 else:
561 self._prepare_linked_requirement(req, parallel_builds)
562
563 # TODO: separate this part out from RequirementPreparer when the v1
564 # resolver can be removed!
565 self._complete_partial_requirements(
566 partially_downloaded_reqs,
567 parallel_builds=parallel_builds,
568 )
569

References pip._internal.operations.prepare._check_download_dir(), RequirementPreparer._complete_partial_requirements(), RequirementPreparer._get_linked_req_hashes(), RequirementPreparer._prepare_linked_requirement(), RequirementPreparer.download_dir, and i.

Here is the call graph for this function:

◆ save_linked_requirement()

None save_linked_requirement (   self,
InstallRequirement  req 
)

Definition at line 662 of file prepare.py.

662 def save_linked_requirement(self, req: InstallRequirement) -> None:
663 assert self.download_dir is not None
664 assert req.link is not None
665 link = req.link
667 # Make a .zip of the source_dir we already created.
668 req.archive(self.download_dir)
669 return
670
673 "Not copying link to destination directory "
674 "since it is a directory: %s",
675 link,
676 )
677 return
678 if req.local_file_path is None:
679 # No distribution was downloaded for this requirement.
680 return
681
682 download_location = os.path.join(self.download_dir, link.filename)
683 if not os.path.exists(download_location):
684 shutil.copy(req.local_file_path, download_location)
685 download_path = display_path(download_location)
686 logger.info("Saved %s", download_path)
687

References RequirementPreparer.download_dir, and i.

Field Documentation

◆ _batch_download

_batch_download
protected

Definition at line 238 of file prepare.py.

Referenced by RequirementPreparer._complete_partial_requirements().

◆ _download

◆ _previous_requirement_header

_previous_requirement_header
protected

Definition at line 270 of file prepare.py.

Referenced by RequirementPreparer._log_preparing_link().

◆ _session

◆ build_dir

build_dir

Definition at line 234 of file prepare.py.

Referenced by RequirementPreparer._ensure_link_req_src_dir().

◆ build_isolation

◆ build_tracker

◆ check_build_deps

◆ download_dir

◆ finder

◆ legacy_resolver

legacy_resolver

Definition at line 264 of file prepare.py.

Referenced by RequirementPreparer._fetch_metadata_only().

◆ require_hashes

◆ src_dir

src_dir

Definition at line 233 of file prepare.py.

Referenced by RequirementPreparer.prepare_editable_requirement().

◆ use_lazy_wheel

use_lazy_wheel

Definition at line 258 of file prepare.py.

Referenced by RequirementPreparer._fetch_metadata_using_lazy_wheel().

◆ use_user_site

◆ verbosity


The documentation for this class was generated from the following file: