Skip to content

Commit 9c49e9e

Browse files
committed
Plumb through venv build isolation
1 parent f54dec8 commit 9c49e9e

File tree

5 files changed

+21
-6
lines changed

5 files changed

+21
-6
lines changed

src/pip/_internal/build_env/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
from pip._internal.build_env._base import BuildEnvironment, get_runnable_pip
77
from pip._internal.build_env._custom import CustomBuildEnvironment
88
from pip._internal.build_env._noop import NoOpBuildEnvironment
9+
from pip._internal.build_env._venv import VenvBuildEnvironment
910

1011
BuildIsolationMode = Literal["noop", "custom", "venv"]

src/pip/_internal/build_env/_noop.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from types import TracebackType
2-
from typing import List, Optional, Type, Iterable
2+
from typing import TYPE_CHECKING, Iterable, List, Optional, Type
33

44
from pip._internal.build_env import BuildEnvironment
5-
from pip._internal.index.package_finder import PackageFinder
5+
6+
if TYPE_CHECKING:
7+
from pip._internal.index.package_finder import PackageFinder
68

79

810
class NoOpBuildEnvironment(BuildEnvironment):

src/pip/_internal/cli/cmdoptions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,7 @@ def check_list_path_option(options: Values) -> None:
984984
"fast-deps",
985985
"truststore",
986986
"no-binary-enable-wheel-cache",
987+
"venv-isolation",
987988
],
988989
help="Enable new functionality, that may be backward incompatible.",
989990
)

src/pip/_internal/cli/req_command.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,8 @@ def make_requirement_preparer(
308308

309309
if not options.build_isolation:
310310
build_isolation: BuildIsolationMode = "noop"
311+
elif "venv-isolation" in options.features_enabled:
312+
build_isolation = "venv"
311313
else:
312314
build_isolation = "custom"
313315

src/pip/_internal/distributions/sdist.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import logging
22
from typing import Iterable, Set, Tuple
33

4-
from pip._internal.build_env import BuildIsolationMode, CustomBuildEnvironment
4+
from pip._internal.build_env import (
5+
BuildIsolationMode,
6+
CustomBuildEnvironment,
7+
VenvBuildEnvironment,
8+
)
59
from pip._internal.distributions.base import AbstractDistribution
610
from pip._internal.exceptions import InstallationError
711
from pip._internal.index.package_finder import PackageFinder
@@ -35,7 +39,7 @@ def prepare_distribution_metadata(
3539
if should_isolate:
3640
# Setup an isolated environment and install the build backend static
3741
# requirements in it.
38-
self._prepare_build_backend(finder)
42+
self._prepare_build_backend(finder, build_isolation)
3943
# Check that if the requirement is editable, it either supports PEP 660 or
4044
# has a setup.py or a setup.cfg. This cannot be done earlier because we need
4145
# to setup the build backend to verify it supports build_editable, nor can
@@ -60,13 +64,18 @@ def prepare_distribution_metadata(
6064
self._raise_missing_reqs(missing)
6165
self.req.prepare_metadata()
6266

63-
def _prepare_build_backend(self, finder: PackageFinder) -> None:
67+
def _prepare_build_backend(
68+
self, finder: PackageFinder, build_isolation: BuildIsolationMode
69+
) -> None:
6470
# Isolate in a BuildEnvironment and install the build-time
6571
# requirements.
6672
pyproject_requires = self.req.pyproject_requires
6773
assert pyproject_requires is not None
6874

69-
self.req.build_env = CustomBuildEnvironment()
75+
if build_isolation == "custom":
76+
self.req.build_env = CustomBuildEnvironment()
77+
else:
78+
self.req.build_env = VenvBuildEnvironment()
7079
self.req.build_env.install_requirements(
7180
finder, pyproject_requires, "overlay", kind="build dependencies"
7281
)

0 commit comments

Comments
 (0)