import logging | |
import os | |
from typing import Optional | |
from pip._vendor.pyproject_hooks import BuildBackendHookCaller | |
from pip._internal.utils.subprocess import runner_with_spinner_message | |
logger = logging.getLogger(__name__) | |
def build_wheel_pep517( | |
name: str, | |
backend: BuildBackendHookCaller, | |
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) | |