Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
download.py
Go to the documentation of this file.
1import logging
2import os
3from optparse import Values
4from typing import List
5
6from pip._internal.cli import cmdoptions
7from pip._internal.cli.cmdoptions import make_target_python
8from pip._internal.cli.req_command import RequirementCommand, with_cleanup
9from pip._internal.cli.status_codes import SUCCESS
10from pip._internal.operations.build.build_tracker import get_build_tracker
11from pip._internal.req.req_install import check_legacy_setup_py_options
12from pip._internal.utils.misc import ensure_dir, normalize_path, write_output
13from pip._internal.utils.temp_dir import TempDirectory
14
15logger = logging.getLogger(__name__)
16
17
19 """
20 Download packages from:
21
22 - PyPI (and other indexes) using requirement specifiers.
23 - VCS project urls.
24 - Local project directories.
25 - Local or remote source archives.
26
27 pip also supports downloading from "requirements files", which provide
28 an easy way to specify a whole environment to be downloaded.
29 """
30
31 usage = """
32 %prog [options] <requirement specifier> [package-index-options] ...
33 %prog [options] -r <requirements file> [package-index-options] ...
34 %prog [options] <vcs project url> ...
35 %prog [options] <local project path> ...
36 %prog [options] <archive url/path> ..."""
37
38 def add_options(self) -> None:
55
57 "-d",
58 "--dest",
59 "--destination-dir",
60 "--destination-directory",
61 dest="download_dir",
62 metavar="dir",
63 default=os.curdir,
64 help="Download packages into <dir>.",
65 )
66
68
72 )
73
74 self.parserparser.insert_option_group(0, index_opts)
75 self.parserparser.insert_option_group(0, self.cmd_optscmd_opts)
76
77 @with_cleanup
78 def run(self, options: Values, args: List[str]) -> int:
80 # editable doesn't really make sense for `pip download`, but the bowels
81 # of the RequirementSet code require that property.
83
85
87 ensure_dir(options.download_dir)
88
89 session = self.get_default_session(options)
90
91 target_python = make_target_python(options)
92 finder = self._build_package_finder(
93 options=options,
94 session=session,
95 target_python=target_python,
96 ignore_requires_python=options.ignore_requires_python,
97 )
98
99 build_tracker = self.enter_context(get_build_tracker())
100
101 directory = TempDirectory(
102 delete=not options.no_clean,
103 kind="download",
104 globally_managed=True,
105 )
106
107 reqs = self.get_requirements(args, options, finder, session)
108 check_legacy_setup_py_options(options, reqs)
109
110 preparer = self.make_requirement_preparer(
111 temp_build_dir=directory,
112 options=options,
113 build_tracker=build_tracker,
114 session=session,
115 finder=finder,
116 download_dir=options.download_dir,
117 use_user_site=False,
118 verbosity=self.verbosity,
119 )
120
121 resolver = self.make_resolver(
122 preparer=preparer,
123 finder=finder,
124 options=options,
125 ignore_requires_python=options.ignore_requires_python,
126 use_pep517=options.use_pep517,
127 py_version_info=options.python_version,
128 )
129
130 self.trace_basic_info(finder)
131
132 requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
133
134 downloaded: List[str] = []
136 if req.satisfied_by is None:
137 assert req.name is not None
140
143
144 if downloaded:
145 write_output("Successfully downloaded %s", " ".join(downloaded))
146
147 return SUCCESS
_T enter_context(self, ContextManager[_T] context_provider)
List[InstallRequirement] get_requirements(self, List[str] args, Values options, PackageFinder finder, PipSession session)
PackageFinder _build_package_finder(self, Values options, PipSession session, Optional[TargetPython] target_python=None, Optional[bool] ignore_requires_python=None)
BaseResolver make_resolver(cls, RequirementPreparer preparer, PackageFinder finder, Values options, Optional[WheelCache] wheel_cache=None, bool use_user_site=False, bool ignore_installed=True, bool ignore_requires_python=False, bool force_reinstall=False, str upgrade_strategy="to-satisfy-only", Optional[bool] use_pep517=None, Optional[Tuple[int,...]] py_version_info=None)
RequirementPreparer make_requirement_preparer(cls, TempDirectory temp_build_dir, Values options, BuildTracker build_tracker, PipSession session, PackageFinder finder, bool use_user_site, Optional[str] download_dir=None, int verbosity=0)
PipSession get_default_session(self, Values options)
int run(self, Values options, List[str] args)
Definition download.py:78
for i