Skip to content

Commit 8256146

Browse files
committed
Support make-variant without isolation
1 parent 7534931 commit 8256146

File tree

1 file changed

+41
-22
lines changed

1 file changed

+41
-22
lines changed

variantlib/commands/make_variant.py

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import shutil
99
import sys
1010
import zipfile
11+
from contextlib import nullcontext
1112
from subprocess import CalledProcessError
13+
from typing import TYPE_CHECKING
1214

1315
from variantlib import __package_name__
1416
from variantlib.api import VariantDescription
@@ -46,6 +48,12 @@ def make_variant(args: list[str]) -> None:
4648
help="Output Directory to use to store the Wheel Variant",
4749
)
4850

51+
parser.add_argument(
52+
"--no-isolation",
53+
action="store_true",
54+
help="Use providers already installed in callignPython environment",
55+
)
56+
4957
parser.add_argument(
5058
"--installer",
5159
choices=("pip", "uv"),
@@ -107,6 +115,7 @@ def make_variant(args: list[str]) -> None:
107115
validate_properties=not parsed_args.skip_plugin_validation,
108116
variant_info=pyproject_toml,
109117
installer=parsed_args.installer,
118+
use_isolation=not parsed_args.no_isolation,
110119
)
111120

112121

@@ -119,6 +128,7 @@ def _make_variant(
119128
validate_properties: bool = True,
120129
variant_info: VariantPyProjectToml,
121130
installer: str | None = None,
131+
use_isolation: bool = True,
122132
) -> None:
123133
# Input Validation
124134
if not input_filepath.is_file():
@@ -139,38 +149,47 @@ def _make_variant(
139149
vdesc = VariantDescription(properties=properties)
140150

141151
if validate_properties:
142-
from build.env import DefaultIsolatedEnv
143-
144-
# make it really verbose to make mypy happy
145-
if installer is None:
146-
env_factory = DefaultIsolatedEnv()
147-
elif installer == "pip":
148-
env_factory = DefaultIsolatedEnv(installer="pip")
149-
elif installer == "uv":
150-
env_factory = DefaultIsolatedEnv(installer="uv")
152+
if TYPE_CHECKING:
153+
from build.env import DefaultIsolatedEnv
154+
155+
env_factory: DefaultIsolatedEnv | nullcontext[None]
156+
157+
if use_isolation:
158+
from build.env import DefaultIsolatedEnv
159+
160+
# make it really verbose to make mypy happy
161+
if installer is None:
162+
env_factory = DefaultIsolatedEnv()
163+
elif installer == "pip":
164+
env_factory = DefaultIsolatedEnv(installer="pip")
165+
elif installer == "uv":
166+
env_factory = DefaultIsolatedEnv(installer="uv")
167+
else:
168+
raise ValueError(f"unexpected installer={installer}")
151169
else:
152-
raise ValueError(f"unexpected installer={installer}")
170+
env_factory = nullcontext()
153171

154172
with env_factory as venv:
155-
try:
156-
venv.install(
157-
variant_info.get_provider_requires(
158-
{vprop.namespace for vprop in vdesc.properties}
173+
if venv is not None:
174+
try:
175+
venv.install(
176+
variant_info.get_provider_requires(
177+
{vprop.namespace for vprop in vdesc.properties}
178+
)
159179
)
160-
)
161-
except CalledProcessError as err:
162-
sys.stderr.write(
163-
"Installing variant provider dependencies failed:\n"
164-
f"{err.stderr.decode()}"
165-
)
166-
raise
180+
except CalledProcessError as err:
181+
sys.stderr.write(
182+
"Installing variant provider dependencies failed:\n"
183+
f"{err.stderr.decode()}"
184+
)
185+
raise
167186

168187
# Verify whether the variant properties are valid
169188
vdesc_valid = validate_variant(
170189
vdesc,
171190
variant_info=variant_info,
172191
use_auto_install=False,
173-
venv_path=venv.path,
192+
venv_path=venv.path if venv is not None else None,
174193
)
175194
if vdesc_valid.invalid_properties:
176195
invalid_str = ", ".join(

0 commit comments

Comments
 (0)