Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/pip/_internal/commands/download.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
| author | guerler |
|---|---|
| date | Fri, 31 Jul 2020 00:32:28 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:d30785e31577 | 1:56ad4e20f292 |
|---|---|
| 1 from __future__ import absolute_import | |
| 2 | |
| 3 import logging | |
| 4 import os | |
| 5 | |
| 6 from pip._internal.cli import cmdoptions | |
| 7 from pip._internal.cli.base_command import RequirementCommand | |
| 8 from pip._internal.cli.cmdoptions import make_target_python | |
| 9 from pip._internal.legacy_resolve import Resolver | |
| 10 from pip._internal.operations.prepare import RequirementPreparer | |
| 11 from pip._internal.req import RequirementSet | |
| 12 from pip._internal.req.req_tracker import RequirementTracker | |
| 13 from pip._internal.utils.filesystem import check_path_owner | |
| 14 from pip._internal.utils.misc import ensure_dir, normalize_path | |
| 15 from pip._internal.utils.temp_dir import TempDirectory | |
| 16 | |
| 17 logger = logging.getLogger(__name__) | |
| 18 | |
| 19 | |
| 20 class DownloadCommand(RequirementCommand): | |
| 21 """ | |
| 22 Download packages from: | |
| 23 | |
| 24 - PyPI (and other indexes) using requirement specifiers. | |
| 25 - VCS project urls. | |
| 26 - Local project directories. | |
| 27 - Local or remote source archives. | |
| 28 | |
| 29 pip also supports downloading from "requirements files", which provide | |
| 30 an easy way to specify a whole environment to be downloaded. | |
| 31 """ | |
| 32 name = 'download' | |
| 33 | |
| 34 usage = """ | |
| 35 %prog [options] <requirement specifier> [package-index-options] ... | |
| 36 %prog [options] -r <requirements file> [package-index-options] ... | |
| 37 %prog [options] <vcs project url> ... | |
| 38 %prog [options] <local project path> ... | |
| 39 %prog [options] <archive url/path> ...""" | |
| 40 | |
| 41 summary = 'Download packages.' | |
| 42 | |
| 43 def __init__(self, *args, **kw): | |
| 44 super(DownloadCommand, self).__init__(*args, **kw) | |
| 45 | |
| 46 cmd_opts = self.cmd_opts | |
| 47 | |
| 48 cmd_opts.add_option(cmdoptions.constraints()) | |
| 49 cmd_opts.add_option(cmdoptions.requirements()) | |
| 50 cmd_opts.add_option(cmdoptions.build_dir()) | |
| 51 cmd_opts.add_option(cmdoptions.no_deps()) | |
| 52 cmd_opts.add_option(cmdoptions.global_options()) | |
| 53 cmd_opts.add_option(cmdoptions.no_binary()) | |
| 54 cmd_opts.add_option(cmdoptions.only_binary()) | |
| 55 cmd_opts.add_option(cmdoptions.prefer_binary()) | |
| 56 cmd_opts.add_option(cmdoptions.src()) | |
| 57 cmd_opts.add_option(cmdoptions.pre()) | |
| 58 cmd_opts.add_option(cmdoptions.no_clean()) | |
| 59 cmd_opts.add_option(cmdoptions.require_hashes()) | |
| 60 cmd_opts.add_option(cmdoptions.progress_bar()) | |
| 61 cmd_opts.add_option(cmdoptions.no_build_isolation()) | |
| 62 cmd_opts.add_option(cmdoptions.use_pep517()) | |
| 63 cmd_opts.add_option(cmdoptions.no_use_pep517()) | |
| 64 | |
| 65 cmd_opts.add_option( | |
| 66 '-d', '--dest', '--destination-dir', '--destination-directory', | |
| 67 dest='download_dir', | |
| 68 metavar='dir', | |
| 69 default=os.curdir, | |
| 70 help=("Download packages into <dir>."), | |
| 71 ) | |
| 72 | |
| 73 cmdoptions.add_target_python_options(cmd_opts) | |
| 74 | |
| 75 index_opts = cmdoptions.make_option_group( | |
| 76 cmdoptions.index_group, | |
| 77 self.parser, | |
| 78 ) | |
| 79 | |
| 80 self.parser.insert_option_group(0, index_opts) | |
| 81 self.parser.insert_option_group(0, cmd_opts) | |
| 82 | |
| 83 def run(self, options, args): | |
| 84 options.ignore_installed = True | |
| 85 # editable doesn't really make sense for `pip download`, but the bowels | |
| 86 # of the RequirementSet code require that property. | |
| 87 options.editables = [] | |
| 88 | |
| 89 cmdoptions.check_dist_restriction(options) | |
| 90 | |
| 91 options.src_dir = os.path.abspath(options.src_dir) | |
| 92 options.download_dir = normalize_path(options.download_dir) | |
| 93 | |
| 94 ensure_dir(options.download_dir) | |
| 95 | |
| 96 with self._build_session(options) as session: | |
| 97 target_python = make_target_python(options) | |
| 98 finder = self._build_package_finder( | |
| 99 options=options, | |
| 100 session=session, | |
| 101 target_python=target_python, | |
| 102 ) | |
| 103 build_delete = (not (options.no_clean or options.build_dir)) | |
| 104 if options.cache_dir and not check_path_owner(options.cache_dir): | |
| 105 logger.warning( | |
| 106 "The directory '%s' or its parent directory is not owned " | |
| 107 "by the current user and caching wheels has been " | |
| 108 "disabled. check the permissions and owner of that " | |
| 109 "directory. If executing pip with sudo, you may want " | |
| 110 "sudo's -H flag.", | |
| 111 options.cache_dir, | |
| 112 ) | |
| 113 options.cache_dir = None | |
| 114 | |
| 115 with RequirementTracker() as req_tracker, TempDirectory( | |
| 116 options.build_dir, delete=build_delete, kind="download" | |
| 117 ) as directory: | |
| 118 | |
| 119 requirement_set = RequirementSet( | |
| 120 require_hashes=options.require_hashes, | |
| 121 ) | |
| 122 self.populate_requirement_set( | |
| 123 requirement_set, | |
| 124 args, | |
| 125 options, | |
| 126 finder, | |
| 127 session, | |
| 128 self.name, | |
| 129 None | |
| 130 ) | |
| 131 | |
| 132 preparer = RequirementPreparer( | |
| 133 build_dir=directory.path, | |
| 134 src_dir=options.src_dir, | |
| 135 download_dir=options.download_dir, | |
| 136 wheel_download_dir=None, | |
| 137 progress_bar=options.progress_bar, | |
| 138 build_isolation=options.build_isolation, | |
| 139 req_tracker=req_tracker, | |
| 140 ) | |
| 141 | |
| 142 resolver = Resolver( | |
| 143 preparer=preparer, | |
| 144 finder=finder, | |
| 145 session=session, | |
| 146 wheel_cache=None, | |
| 147 use_user_site=False, | |
| 148 upgrade_strategy="to-satisfy-only", | |
| 149 force_reinstall=False, | |
| 150 ignore_dependencies=options.ignore_dependencies, | |
| 151 py_version_info=options.python_version, | |
| 152 ignore_requires_python=False, | |
| 153 ignore_installed=True, | |
| 154 isolated=options.isolated_mode, | |
| 155 ) | |
| 156 resolver.resolve(requirement_set) | |
| 157 | |
| 158 downloaded = ' '.join([ | |
| 159 req.name for req in requirement_set.successfully_downloaded | |
| 160 ]) | |
| 161 if downloaded: | |
| 162 logger.info('Successfully downloaded %s', downloaded) | |
| 163 | |
| 164 # Clean up | |
| 165 if not options.no_clean: | |
| 166 requirement_set.cleanup_files() | |
| 167 | |
| 168 return requirement_set |
