Skip to main content

auditwheel-like tool for Pyodide

Project description

auditwheel-emscripten

PyPI Latest Release Test Status

auditwheel-like tool for wheels targeting Emscripten platform

$ pip install auditwheel-emscripten

What is this?

auditwheel-emscripten is a tiny tool to facilitate the creation of Python wheel packages for Emscripten. auditwheel-emscripten is originally created for Pyodide, but it can be used in any other projects that target Python-in-the-browser using Emscripten.

  • pyodide auditwheel show: shows external shared libraries that the wheel depends on.
  • pyodide auditwheel repair: copies these external shared libraries into the wheel itself, and update the RPATH of the WASM module correspondingly.

Usage (CLI)

 Usage: pyodide auditwheel [OPTIONS] COMMAND [ARGS]...

 Auditwheel-like tool for emscripten wheels and shared libraries.

╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                         │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ copy      [Deprecated] Copy shared libraries to the wheel directory. Works same as repair. Use repair instead.          │
│ exports   Show exports of a wheel or a shared library file.                                                                         │
│ imports   Show imports of a wheel or a shared library file.                                                                         │
│ repair    Repair a wheel file: copy shared libraries to the wheel directory.   │
│ show      Show shared library dependencies of a wheel or a shared library file.                                                     │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
$ pyodide auditwheel show shapely-2.0.7-cp313-cp313-pyodide_2025_0_wasm32.whl
shapely/speedups/_speedups.cpython-310-wasm32-emscripten.so:
        libgeos_c.so

shapely/vectorized/_vectorized.cpython-310-wasm32-emscripten.so:
        libgeos_c.so
$ pyodide auditwheel repair --libdir <directory which contains libgeos_c.so> shapely-2.0.7-cp313-cp313-pyodide_2025_0_wasm32.whl
shapely/lib.cpython-313-wasm32-emscripten.so:
        libgeos_c.so => shapely.libs/libgeos_c.so

shapely/_geometry_helpers.cpython-313-wasm32-emscripten.so:
        libgeos_c.so => shapely.libs/libgeos_c.so

shapely/_geos.cpython-313-wasm32-emscripten.so:
        libgeos_c.so => shapely.libs/libgeos_c.so

shapely.libs/libgeos.so:

shapely.libs/libgeos_c.so:
        libgeos.so => shapely.libs/libgeos.so

Usage (API)

Listing shared library dependencies of a wheel file:

from auditwheel_emscripten import show
libs = show("Shapely-1.8.2-cp310-cp310-emscripten_3_1_14_wasm32.whl")
print(libs)
# {'shapely/vectorized/_vectorized.cpython-310-wasm32-emscripten.so': ['libgeos_c.so'], 'shapely/speedups/_speedups.cpython-310-wasm32-emscripten.so': ['libgeos_c.so']}

Copying shared libraries to the wheel:

from auditwheel_emscripten import repair, show
repaired_wheel = repair(
    "Shapely-1.8.2-cp310-cp310-emscripten_3_1_14_wasm32.whl",
    libdir="/path/where/shared/libraries/are/located",
    outdir="/path/to/output/directory",
)
libs = show(repaired_wheel)
print(libs)
# {'Shapely.libs/libgeos.so.3.10.3': [], 'Shapely.libs/libgeos_c.so': ['libgeos.so.3.10.3'], 'shapely/speedups/_speedups.cpython-310-wasm32-emscripten.so': ['libgeos_c.so'], 'shapely/vectorized/_vectorized.cpython-310-wasm32-emscripten.so': ['libgeos_c.so']}

Implementation details / limitations

Dynamic linking in Emscripten

Dynamic linking is not in the WebAssembly specification, but Emscripten has its own dynamic linking support, which is required for building Python wheels targeting Emscripten platform.

This tool is based on:

auditwheel vs auditwheel-emscripten

auditwheel is a tool that helps repair and modify Python wheels (pre-compiled packages) to be compatible with a wide range of Linux distributions. It does this by copying external shared libraries into the wheel and repairing the RPATH (a file path that is used to locate shared libraries at runtime) of the ELF binary so that the Linux operating system can locate the library when the program is run.

auditwheel-emscripten is a variation of auditwheel that is specifically designed to work with Emscripten-generated WebAssembly (WASM) modules. Like auditwheel, it copies the required shared libraries into the wheel and patches the runtime search path of each WASM module so the dynamic linker can locate them at runtime. It does this by writing a RUNTIME_PATH entry (using $ORIGIN-relative paths) into the dylink.0 custom section of each module, which is the Emscripten equivalent of the ELF RPATH. Pyodide's dynamic linker reads this section to resolve library locations.

Unlike auditwheel on Linux, auditwheel-emscripten does not enforce compatibility between Emscripten versions, since no stable ABI exists for Emscripten-compiled shared libraries.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

auditwheel_emscripten-0.2.5.tar.gz (5.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

auditwheel_emscripten-0.2.5-py3-none-any.whl (33.9 kB view details)

Uploaded Python 3

File details

Details for the file auditwheel_emscripten-0.2.5.tar.gz.

File metadata

  • Download URL: auditwheel_emscripten-0.2.5.tar.gz
  • Upload date:
  • Size: 5.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for auditwheel_emscripten-0.2.5.tar.gz
Algorithm Hash digest
SHA256 183706b60570844913d4039140c95d4914cfa56b8f8afbc5ee53eaefa5056ea9
MD5 66193e11512b41df677e7bffc10a9c65
BLAKE2b-256 b1b57b376cfcb4dca2516f6474f17f38d0e521850728c25a3669fdfbecccc9db

See more details on using hashes here.

Provenance

The following attestation bundles were made for auditwheel_emscripten-0.2.5.tar.gz:

Publisher: deploy.yml on pyodide/auditwheel-emscripten

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file auditwheel_emscripten-0.2.5-py3-none-any.whl.

File metadata

File hashes

Hashes for auditwheel_emscripten-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c76a2c26f6c731c00d97a59d384d55033c7b2a5f4612c7c454f259ae8c2543aa
MD5 4146c4118b86cd5aa5526d521daae90f
BLAKE2b-256 932bb878a3087517894630f77acaca28f3e9e8356aac3ae1c0380d4354436e74

See more details on using hashes here.

Provenance

The following attestation bundles were made for auditwheel_emscripten-0.2.5-py3-none-any.whl:

Publisher: deploy.yml on pyodide/auditwheel-emscripten

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page