diff options
Diffstat (limited to 'third_party/python/pip/pip/_internal/operations/build/wheel_editable.py')
-rw-r--r-- | third_party/python/pip/pip/_internal/operations/build/wheel_editable.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/third_party/python/pip/pip/_internal/operations/build/wheel_editable.py b/third_party/python/pip/pip/_internal/operations/build/wheel_editable.py new file mode 100644 index 0000000000..719d69dd80 --- /dev/null +++ b/third_party/python/pip/pip/_internal/operations/build/wheel_editable.py @@ -0,0 +1,46 @@ +import logging +import os +from typing import Optional + +from pip._vendor.pyproject_hooks import BuildBackendHookCaller, HookMissing + +from pip._internal.utils.subprocess import runner_with_spinner_message + +logger = logging.getLogger(__name__) + + +def build_wheel_editable( + name: str, + backend: BuildBackendHookCaller, + metadata_directory: str, + tempd: str, +) -> Optional[str]: + """Build one InstallRequirement using the PEP 660 build process. + + Returns path to wheel if successfully built. Otherwise, returns None. + """ + assert metadata_directory is not None + try: + logger.debug("Destination directory: %s", tempd) + + runner = runner_with_spinner_message( + f"Building editable for {name} (pyproject.toml)" + ) + with backend.subprocess_runner(runner): + try: + wheel_name = backend.build_editable( + tempd, + metadata_directory=metadata_directory, + ) + except HookMissing as e: + logger.error( + "Cannot build editable %s because the build " + "backend does not have the %s hook", + name, + e, + ) + return None + except Exception: + logger.error("Failed building editable for %s", name) + return None + return os.path.join(tempd, wheel_name) |