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 copy: copies these external shared libraries into the wheel itself.

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      Copy shared libraries to the wheel directory. Similar to repair but does not modify the needed section of WASM module.    │
│ exports   Show exports of a wheel or a shared library file.                                                                         │
│ imports   Show imports of a wheel or a shared library file.                                                                         │
│ repair    [Experimental] Repair a wheel file: copy shared libraries to the wheel directory and modify the path in the wheel file.   │
│ show      Show shared library dependencies of a wheel or a shared library file.                                                     │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
# wget https://cdn.jsdelivr.net/pyodide/v0.21.3/full/Shapely-1.8.2-cp310-cp310-emscripten_3_1_14_wasm32.whl
$ pyodide auditwheel show Shapely-1.8.2-cp310-cp310-emscripten_3_1_14_wasm32.whl

The following external shared libraries are required:
{   'shapely/speedups/_speedups.cpython-310-wasm32-emscripten.so': ['libgeos_c.so'],
│   'shapely/vectorized/_vectorized.cpython-310-wasm32-emscripten.so': ['libgeos_c.so']
}
$ pyodide auditwheel copy --libdir <directory which contains libgeos_c.so> Shapely-1.8.2-cp310-cp310-emscripten_3_1_14_wasm32.whl

Repaired wheel has following external shared libraries:
{   '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']
}

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",
    # If set this to true, modify the needed section of WASM module.
    # Note that is not compatible with WebAssembly dynamic linking ABI.
    # https://github.com/WebAssembly/tool-conventions/blob/main/DynamicLinking.md
    modify_needed_section=False,
)
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. It does not perform an audit on the wheel, as Emscripten does not guarantee compatibility between versions. Instead, it simply copies the required libraries into the wheel without modifying the module itself. It is up to the user to manually implement a way to locate these libraries at runtime.

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.0.10.tar.gz (15.4 kB 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.0.10-py3-none-any.whl (19.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: auditwheel_emscripten-0.0.10.tar.gz
  • Upload date:
  • Size: 15.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.1

File hashes

Hashes for auditwheel_emscripten-0.0.10.tar.gz
Algorithm Hash digest
SHA256 cbde383f9c6f397505c3739c9edd8a020ca343bafe84b9453df78e34495cc4b0
MD5 f5e941c42a0e26e08765cf79a30a0720
BLAKE2b-256 956c4fe177cef4c86c4b125c1a5dc31379eb37e363224dfe08f6fe9ec75b7bb9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for auditwheel_emscripten-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 2d993b662738fb44f3d949c77d82f235408037223c6cf41247f8b67cd6a5791e
MD5 88659483ffccf91ece6182f19946d06a
BLAKE2b-256 13dd39c810851cbb18eaa7f5b546d44e0dedf241d89ec1c34df2350493b6e969

See more details on using hashes here.

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