cpython/Platforms/WASI
Miss Islington (bot) 59e54f5ce9
[3.15] gh-151929: Add pythoninfo commands to Platforms/WASI (GH-152136) (#152222)
gh-151929: Add pythoninfo commands to Platforms/WASI (GH-152136)

The "build" command now also runs "pythoninfo-build" and
"pythoninfo-host" commands.

If no subcommand is provided, display the help.

GitHub Action "WASI":

* Add "pythoninfo-build" and "pythoninfo-host" commands.
* Remove unused and outdated CROSS_BUILD_PYTHON environment variable.
(cherry picked from commit 7c8163719c)

Co-authored-by: Victor Stinner <vstinner@python.org>
2026-06-25 17:22:24 +00:00
..
.ruff.toml Refactor Platforms/WASI/__main__.py for lazy importing and future new subcommands (#145404) 2026-03-04 13:27:23 -08:00
__main__.py [3.15] gh-151929: Add pythoninfo commands to Platforms/WASI (GH-152136) (#152222) 2026-06-25 17:22:24 +00:00
_build.py [3.15] gh-151929: Add pythoninfo commands to Platforms/WASI (GH-152136) (#152222) 2026-06-25 17:22:24 +00:00
config.site-wasm32-wasi
config.toml GH-149252: Update WASI SDK version from 32 to 33 (#149253) 2026-05-01 16:51:06 -07:00
README.md
wasmtime.toml

Python WASI (wasm32-wasi) build

WASI support is tier 2.

This directory contains configuration and helpers to facilitate cross compilation of CPython to WebAssembly (WASM) using WASI. WASI builds use WASM runtimes such as wasmtime.

NOTE: If you are looking for general information about WebAssembly that is not directly related to CPython, please see https://github.com/psf/webassembly.

Build

See the devguide on how to build and run for WASI.

Detecting WASI builds

Python code

import os, sys

if sys.platform == "wasi":
    # Python on WASI
    ...

if os.name == "posix":
    # WASM platforms identify as POSIX-like.
    # Windows does not provide os.uname().
    machine = os.uname().machine
    if machine.startswith("wasm"):
        # WebAssembly (wasm32, wasm64 potentially in the future)
>>> import os, sys
>>> os.uname()
posix.uname_result(
    sysname='wasi',
    nodename='(none)',
    release='0.0.0',
    version='0.0.0',
    machine='wasm32'
)
>>> os.name
'posix'
>>> sys.platform
'wasi'

C code

WASI SDK defines several built-in macros. You can dump a full list of built-ins with /path/to/wasi-sdk/bin/clang -dM -E - < /dev/null.

  • WebAssembly __wasm__ (also __wasm)
  • wasm32 __wasm32__ (also __wasm32)
  • wasm64 __wasm64__
  • WASI __wasi__