]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-144533: Use wasmtime's --argv0 to auto-discover sysconfig in WASI builds (#145328)
authorSavannah Ostrowski <savannah@python.org>
Sat, 28 Feb 2026 00:23:12 +0000 (16:23 -0800)
committerGitHub <noreply@github.com>
Sat, 28 Feb 2026 00:23:12 +0000 (00:23 +0000)
Misc/NEWS.d/next/Build/2026-02-27-18-10-02.gh-issue-144533.21fk9L.rst [new file with mode: 0644]
Platforms/WASI/__main__.py

diff --git a/Misc/NEWS.d/next/Build/2026-02-27-18-10-02.gh-issue-144533.21fk9L.rst b/Misc/NEWS.d/next/Build/2026-02-27-18-10-02.gh-issue-144533.21fk9L.rst
new file mode 100644 (file)
index 0000000..d6e0201
--- /dev/null
@@ -0,0 +1 @@
+Use wasmtime's ``--argv0`` to auto-discover sysconfig in WASI builds
index 8302432fd2f1060ccc22a12d238a2370d79055b6..471ac3297b270299c257802a40f70199ce425316 100644 (file)
@@ -317,21 +317,8 @@ def configure_wasi_python(context, working_dir):
 
     wasi_build_dir = working_dir.relative_to(CHECKOUT)
 
-    python_build_dir = BUILD_DIR / "build"
-    lib_dirs = list(python_build_dir.glob("lib.*"))
-    assert len(lib_dirs) == 1, (
-        f"Expected a single lib.* directory in {python_build_dir}"
-    )
-    lib_dir = os.fsdecode(lib_dirs[0])
-    python_version = lib_dir.rpartition("-")[-1]
-    sysconfig_data_dir = (
-        f"{wasi_build_dir}/build/lib.wasi-wasm32-{python_version}"
-    )
-
-    # Use PYTHONPATH to include sysconfig data which must be anchored to the
-    # WASI guest's `/` directory.
     args = {
-        "PYTHONPATH": f"/{sysconfig_data_dir}",
+        "ARGV0": f"/{wasi_build_dir}/python.wasm",
         "PYTHON_WASM": working_dir / "python.wasm",
     }
     # Check dynamically for wasmtime in case it was specified manually via
@@ -421,8 +408,8 @@ def main():
     default_host_triple = config["targets"]["host-triple"]
     default_host_runner = (
         f"{WASMTIME_HOST_RUNNER_VAR} run "
-        # For setting PYTHONPATH to the sysconfig data directory.
-        "--env PYTHONPATH={PYTHONPATH} "
+        # Set argv0 so that getpath.py can auto-discover the sysconfig data directory
+        "--argv0 {ARGV0} "
         # Map the checkout to / to load the stdlib from /Lib.
         f"--dir {os.fsdecode(CHECKOUT)}::/ "
         # Flags involving --optimize, --codegen, --debug, --wasm, and --wasi can be kept