Path: blob/master/venv/Lib/site-packages/pip/_internal/commands/download.py
811 views
# The following comment should be removed at some point in the future.1# mypy: disallow-untyped-defs=False23from __future__ import absolute_import45import logging6import os78from pip._internal.cli import cmdoptions9from pip._internal.cli.cmdoptions import make_target_python10from pip._internal.cli.req_command import RequirementCommand, with_cleanup11from pip._internal.req.req_tracker import get_requirement_tracker12from pip._internal.utils.misc import ensure_dir, normalize_path, write_output13from pip._internal.utils.temp_dir import TempDirectory1415logger = logging.getLogger(__name__)161718class DownloadCommand(RequirementCommand):19"""20Download packages from:2122- PyPI (and other indexes) using requirement specifiers.23- VCS project urls.24- Local project directories.25- Local or remote source archives.2627pip also supports downloading from "requirements files", which provide28an easy way to specify a whole environment to be downloaded.29"""3031usage = """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> ..."""3738def __init__(self, *args, **kw):39super(DownloadCommand, self).__init__(*args, **kw)4041cmd_opts = self.cmd_opts4243cmd_opts.add_option(cmdoptions.constraints())44cmd_opts.add_option(cmdoptions.requirements())45cmd_opts.add_option(cmdoptions.build_dir())46cmd_opts.add_option(cmdoptions.no_deps())47cmd_opts.add_option(cmdoptions.global_options())48cmd_opts.add_option(cmdoptions.no_binary())49cmd_opts.add_option(cmdoptions.only_binary())50cmd_opts.add_option(cmdoptions.prefer_binary())51cmd_opts.add_option(cmdoptions.src())52cmd_opts.add_option(cmdoptions.pre())53cmd_opts.add_option(cmdoptions.require_hashes())54cmd_opts.add_option(cmdoptions.progress_bar())55cmd_opts.add_option(cmdoptions.no_build_isolation())56cmd_opts.add_option(cmdoptions.use_pep517())57cmd_opts.add_option(cmdoptions.no_use_pep517())5859cmd_opts.add_option(60'-d', '--dest', '--destination-dir', '--destination-directory',61dest='download_dir',62metavar='dir',63default=os.curdir,64help=("Download packages into <dir>."),65)6667cmdoptions.add_target_python_options(cmd_opts)6869index_opts = cmdoptions.make_option_group(70cmdoptions.index_group,71self.parser,72)7374self.parser.insert_option_group(0, index_opts)75self.parser.insert_option_group(0, cmd_opts)7677@with_cleanup78def run(self, options, args):79options.ignore_installed = True80# editable doesn't really make sense for `pip download`, but the bowels81# of the RequirementSet code require that property.82options.editables = []8384cmdoptions.check_dist_restriction(options)8586options.download_dir = normalize_path(options.download_dir)8788ensure_dir(options.download_dir)8990session = self.get_default_session(options)9192target_python = make_target_python(options)93finder = self._build_package_finder(94options=options,95session=session,96target_python=target_python,97)98build_delete = (not (options.no_clean or options.build_dir))99100req_tracker = self.enter_context(get_requirement_tracker())101102directory = TempDirectory(103options.build_dir,104delete=build_delete,105kind="download",106globally_managed=True,107)108109reqs = self.get_requirements(args, options, finder, session)110111preparer = self.make_requirement_preparer(112temp_build_dir=directory,113options=options,114req_tracker=req_tracker,115session=session,116finder=finder,117download_dir=options.download_dir,118use_user_site=False,119)120121resolver = self.make_resolver(122preparer=preparer,123finder=finder,124options=options,125py_version_info=options.python_version,126)127128self.trace_basic_info(finder)129130requirement_set = resolver.resolve(131reqs, check_supported_wheels=True132)133134downloaded = ' '.join([135req.name for req in requirement_set.requirements.values()136if req.successfully_downloaded137])138if downloaded:139write_output('Successfully downloaded %s', downloaded)140141return requirement_set142143144