| import logging | |
| import os | |
| from typing import Optional | |
| from pip._vendor.pep517.wrappers import Pep517HookCaller | |
| from pip._internal.utils.subprocess import runner_with_spinner_message | |
| logger = logging.getLogger(__name__) | |
| def build_wheel_pep517( | |
| name: str, | |
| backend: Pep517HookCaller, | |
| metadata_directory: str, | |
| tempd: str, | |
| ) -> Optional[str]: | |
| """Build one InstallRequirement using the PEP 517 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 wheel for {name} (pyproject.toml)" | |
| ) | |
| with backend.subprocess_runner(runner): | |
| wheel_name = backend.build_wheel( | |
| tempd, | |
| metadata_directory=metadata_directory, | |
| ) | |
| except Exception: | |
| logger.error("Failed building wheel for %s", name) | |
| return None | |
| return os.path.join(tempd, wheel_name) | |