Short-circuit get_requires hooks when there are no extra build dependencies #4973
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary of changes
The PEP 517
get_requires_for_build_(wheel|sdist)
hooks function by running theegg_info
command with a patched Distribution that raises a special exception when build dependencies (fromsetup_requires
) are about to be installed.This works great at minimizing the overhead of the requires hooks... except when there are no dynamic build dependencies. In such a situation, the injected
install_build_eggs()
shim that raisesSetupRequirementsError
is never invoked, thus the entireegg_info
command will execute. This often results in substantial overhead for modern projects that use[build-system].requires
and notsetup_requires
.With this simple script at the root of the pip project, this change brings the execution time from ~300ms to ~100ms.
This helps a fair bit with reducing the overhead with PEP 517 processing.