Skip to content

Commit b24a6d0

Browse files
authored
Merge pull request #7522 from pradyunsg/refactor/move-pep517-wheel-build-process
Move PEP-517 wheel build logic into operations.build
2 parents dc860e8 + ccfef67 commit b24a6d0

File tree

2 files changed

+49
-41
lines changed

2 files changed

+49
-41
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import logging
2+
import os
3+
4+
from pip._internal.utils.subprocess import runner_with_spinner_message
5+
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
6+
7+
if MYPY_CHECK_RUNNING:
8+
from typing import List, Optional
9+
from pip._vendor.pep517.wrappers import Pep517HookCaller
10+
11+
logger = logging.getLogger(__name__)
12+
13+
14+
def build_wheel_pep517(
15+
name, # type: str
16+
backend, # type: Pep517HookCaller
17+
metadata_directory, # type: str
18+
build_options, # type: List[str]
19+
tempd, # type: str
20+
):
21+
# type: (...) -> Optional[str]
22+
"""Build one InstallRequirement using the PEP 517 build process.
23+
24+
Returns path to wheel if successfully built. Otherwise, returns None.
25+
"""
26+
assert metadata_directory is not None
27+
if build_options:
28+
# PEP 517 does not support --build-options
29+
logger.error('Cannot build wheel for %s using PEP 517 when '
30+
'--build-option is present' % (name,))
31+
return None
32+
try:
33+
logger.debug('Destination directory: %s', tempd)
34+
35+
runner = runner_with_spinner_message(
36+
'Building wheel for {} (PEP 517)'.format(name)
37+
)
38+
with backend.subprocess_runner(runner):
39+
wheel_name = backend.build_wheel(
40+
tempd,
41+
metadata_directory=metadata_directory,
42+
)
43+
except Exception:
44+
logger.error('Failed building wheel for %s', name)
45+
return None
46+
return os.path.join(tempd, wheel_name)

src/pip/_internal/wheel_builder.py

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010
import shutil
1111

1212
from pip._internal.models.link import Link
13+
from pip._internal.operations.build.wheel import build_wheel_pep517
1314
from pip._internal.operations.build.wheel_legacy import build_wheel_legacy
1415
from pip._internal.utils.logging import indent_log
1516
from pip._internal.utils.marker_files import has_delete_marker_file
1617
from pip._internal.utils.misc import ensure_dir, hash_file
1718
from pip._internal.utils.setuptools_build import make_setuptools_clean_args
18-
from pip._internal.utils.subprocess import (
19-
call_subprocess,
20-
runner_with_spinner_message,
21-
)
19+
from pip._internal.utils.subprocess import call_subprocess
2220
from pip._internal.utils.temp_dir import TempDirectory
2321
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
2422
from pip._internal.utils.unpacking import unpack_file
@@ -35,7 +33,6 @@
3533
RequirementPreparer
3634
)
3735
from pip._internal.req.req_install import InstallRequirement
38-
from pip._vendor.pep517.wrappers import Pep517HookCaller
3936

4037
BinaryAllowedPredicate = Callable[[InstallRequirement], bool]
4138
BuildResult = Tuple[List[InstallRequirement], List[InstallRequirement]]
@@ -127,41 +124,6 @@ def should_cache(
127124
return False
128125

129126

130-
def _build_wheel_pep517(
131-
name, # type: str
132-
backend, # type: Pep517HookCaller
133-
metadata_directory, # type: str
134-
build_options, # type: List[str]
135-
tempd, # type: str
136-
):
137-
# type: (...) -> Optional[str]
138-
"""Build one InstallRequirement using the PEP 517 build process.
139-
140-
Returns path to wheel if successfully built. Otherwise, returns None.
141-
"""
142-
assert metadata_directory is not None
143-
if build_options:
144-
# PEP 517 does not support --build-options
145-
logger.error('Cannot build wheel for %s using PEP 517 when '
146-
'--build-option is present' % (name,))
147-
return None
148-
try:
149-
logger.debug('Destination directory: %s', tempd)
150-
151-
runner = runner_with_spinner_message(
152-
'Building wheel for {} (PEP 517)'.format(name)
153-
)
154-
with backend.subprocess_runner(runner):
155-
wheel_name = backend.build_wheel(
156-
tempd,
157-
metadata_directory=metadata_directory,
158-
)
159-
except Exception:
160-
logger.error('Failed building wheel for %s', name)
161-
return None
162-
return os.path.join(tempd, wheel_name)
163-
164-
165127
def _collect_buildset(
166128
requirements, # type: Iterable[InstallRequirement]
167129
wheel_cache, # type: WheelCache
@@ -252,7 +214,7 @@ def _build_one_inside_env(
252214
# type: (...) -> Optional[str]
253215
with TempDirectory(kind="wheel") as temp_dir:
254216
if req.use_pep517:
255-
wheel_path = _build_wheel_pep517(
217+
wheel_path = build_wheel_pep517(
256218
name=req.name,
257219
backend=req.pep517_backend,
258220
metadata_directory=req.metadata_directory,

0 commit comments

Comments
 (0)