mirror of https://github.com/pypa/pip
New resolver: Avoid polluting dest dir
Previously, during dependency resolution for `pip download -d <dir>` or `pip wheel -w <dir>`, distributions downloaded are always saved to <dir>, even for those are only used in backtracking and are not part of the returned requirement set.
This commit is contained in:
parent
6887b0795b
commit
b28e2c4928
|
@ -0,0 +1,2 @@
|
||||||
|
Avoid polluting the destination directory by resolution artifacts
|
||||||
|
when the new resolver is used for ``pip download`` or ``pip wheel``.
|
|
@ -137,6 +137,7 @@ class DownloadCommand(RequirementCommand):
|
||||||
for req in requirement_set.requirements.values():
|
for req in requirement_set.requirements.values():
|
||||||
if not req.editable and req.satisfied_by is None:
|
if not req.editable and req.satisfied_by is None:
|
||||||
assert req.name is not None
|
assert req.name is not None
|
||||||
|
preparer.save_linked_requirement(req)
|
||||||
downloaded.append(req.name)
|
downloaded.append(req.name)
|
||||||
if downloaded:
|
if downloaded:
|
||||||
write_output('Successfully downloaded %s', ' '.join(downloaded))
|
write_output('Successfully downloaded %s', ' '.join(downloaded))
|
||||||
|
|
|
@ -21,6 +21,7 @@ if MYPY_CHECK_RUNNING:
|
||||||
from optparse import Values
|
from optparse import Values
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
from pip._internal.req.req_install import InstallRequirement
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -156,10 +157,12 @@ class WheelCommand(RequirementCommand):
|
||||||
reqs, check_supported_wheels=True
|
reqs, check_supported_wheels=True
|
||||||
)
|
)
|
||||||
|
|
||||||
reqs_to_build = [
|
reqs_to_build = [] # type: List[InstallRequirement]
|
||||||
r for r in requirement_set.requirements.values()
|
for req in requirement_set.requirements.values():
|
||||||
if should_build_for_wheel_command(r)
|
if req.is_wheel:
|
||||||
]
|
preparer.save_linked_requirement(req)
|
||||||
|
elif should_build_for_wheel_command(req):
|
||||||
|
reqs_to_build.append(req)
|
||||||
|
|
||||||
# build wheels
|
# build wheels
|
||||||
build_successes, build_failures = build(
|
build_successes, build_failures = build(
|
||||||
|
|
|
@ -523,23 +523,33 @@ class RequirementPreparer(object):
|
||||||
dist = _get_prepared_distribution(
|
dist = _get_prepared_distribution(
|
||||||
req, self.req_tracker, self.finder, self.build_isolation,
|
req, self.req_tracker, self.finder, self.build_isolation,
|
||||||
)
|
)
|
||||||
|
return dist
|
||||||
|
|
||||||
if self.download_dir is not None:
|
def save_linked_requirement(self, req):
|
||||||
if link.is_existing_dir():
|
# type: (InstallRequirement) -> None
|
||||||
logger.info('Link is a directory, ignoring download_dir')
|
assert self.download_dir is not None
|
||||||
elif local_file:
|
assert req.link is not None
|
||||||
download_location = os.path.join(
|
link = req.link
|
||||||
self.download_dir, link.filename
|
|
||||||
)
|
|
||||||
if not os.path.exists(download_location):
|
|
||||||
shutil.copy(local_file.path, download_location)
|
|
||||||
download_path = display_path(download_location)
|
|
||||||
logger.info('Saved %s', download_path)
|
|
||||||
|
|
||||||
if link.is_vcs:
|
if link.is_vcs:
|
||||||
# Make a .zip of the source_dir we already created.
|
# Make a .zip of the source_dir we already created.
|
||||||
req.archive(self.download_dir)
|
req.archive(self.download_dir)
|
||||||
return dist
|
return
|
||||||
|
|
||||||
|
if link.is_existing_dir():
|
||||||
|
logger.debug(
|
||||||
|
'Not copying link to destination directory '
|
||||||
|
'since it is a directory: %s', link,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
if req.local_file_path is None:
|
||||||
|
# No distribution was downloaded for this requirement.
|
||||||
|
return
|
||||||
|
|
||||||
|
download_location = os.path.join(self.download_dir, link.filename)
|
||||||
|
if not os.path.exists(download_location):
|
||||||
|
shutil.copy(req.local_file_path, download_location)
|
||||||
|
download_path = display_path(download_location)
|
||||||
|
logger.info('Saved %s', download_path)
|
||||||
|
|
||||||
def prepare_editable_requirement(
|
def prepare_editable_requirement(
|
||||||
self,
|
self,
|
||||||
|
|
Loading…
Reference in New Issue