| from typing import Optional |
| from pip._vendor.pep517.wrappers import HookMissing, Pep517HookCaller |
| from pip._internal.utils.subprocess import runner_with_spinner_message |
| logger = logging.getLogger(__name__) |
| def build_wheel_editable( |
| backend: Pep517HookCaller, |
| """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 |
| logger.debug("Destination directory: %s", tempd) |
| runner = runner_with_spinner_message( |
| f"Building editable for {name} (pyproject.toml)" |
| with backend.subprocess_runner(runner): |
| wheel_name = backend.build_editable( |
| metadata_directory=metadata_directory, |
| "Cannot build editable %s because the build " |
| "backend does not have the %s hook", |
| logger.error("Failed building editable for %s", name) |
| return os.path.join(tempd, wheel_name) |