32
32
)
33
33
from ..util .helpers import prepare_command , unwrap , unwrap_preserving_paragraphs
34
34
from ..util .packaging import combine_constraints , find_compatible_wheel , get_pip_version
35
+ from ..util .python_build_standalone import (
36
+ PythonBuildStandaloneError ,
37
+ create_python_build_standalone_environment ,
38
+ )
35
39
from ..venv import constraint_flags , virtualenv
36
40
37
41
IS_WIN : Final [bool ] = sys .platform .startswith ("win" )
@@ -43,6 +47,7 @@ class PythonConfiguration:
43
47
identifier : str
44
48
default_pyodide_version : str
45
49
node_version : str
50
+ python_build_standalone_tag : str
46
51
47
52
48
53
class PyodideXBuildEnvInfoVersionRange (TypedDict ):
@@ -206,20 +211,20 @@ def install_xbuildenv(env: dict[str, str], pyodide_build_version: str, pyodide_v
206
211
return str (pyodide_root )
207
212
208
213
209
- def get_base_python (identifier : str ) -> Path :
210
- implementation_id = identifier . split ( "-" )[ 0 ]
211
- majorminor = implementation_id [ len ( "cp" ) :]
212
- version_info = ( int ( majorminor [ 0 ]), int ( majorminor [ 1 :]))
213
- if version_info == sys . version_info [: 2 ]:
214
- return Path ( sys . executable )
215
-
216
- major_minor = "." . join ( str ( v ) for v in version_info )
217
- python_name = f"python { major_minor } "
218
- which_python = shutil . which ( python_name )
219
- if which_python is None :
220
- msg = f"CPython { major_minor } is not installed."
221
- raise errors . FatalError ( msg )
222
- return Path ( which_python )
214
+ def get_base_python (tmp : Path , python_configuration : PythonConfiguration ) -> Path :
215
+ try :
216
+ return create_python_build_standalone_environment (
217
+ release_tag = python_configuration . python_build_standalone_tag ,
218
+ python_version = python_configuration . version ,
219
+ temp_dir = tmp ,
220
+ cache_dir = CIBW_CACHE_PATH ,
221
+ )
222
+ except PythonBuildStandaloneError as e :
223
+ msg = unwrap ( f"""
224
+ Failed to create a Python build environment :
225
+ { e }
226
+ """ )
227
+ raise errors . FatalError ( msg ) from e
223
228
224
229
225
230
def setup_python (
@@ -229,7 +234,7 @@ def setup_python(
229
234
environment : ParsedEnvironment ,
230
235
user_pyodide_version : str | None ,
231
236
) -> dict [str , str ]:
232
- base_python = get_base_python (python_configuration . identifier )
237
+ base_python = get_base_python (tmp / "base" , python_configuration )
233
238
pyodide_version = user_pyodide_version or python_configuration .default_pyodide_version
234
239
235
240
log .step ("Setting up build environment..." )
0 commit comments