Skip to main content

A WebAssembly runtime powered by Wasmtime

Project description

wasmtime-py

Python embedding of Wasmtime

A Bytecode Alliance project

CI status Latest Version Latest Version Documentation Code Coverage

Installation

To install wasmtime-py, run this command in your terminal:

$ pip install wasmtime

The package currently supports 64-bit builds of Python 3.6+ on x86_64 Windows, macOS, and Linux.

Versioning

wasmtime-py follows the Wasmtime versioning scheme, with a new major version being released every month. As with Wasmtime itself, new major versions of wasmtime-py can contain changes that break code written against the previous major version.

Since every installed Python package needs to agree on a single version of wasmtime-py, to use the upper bound on the major version in the dependency requirement should be bumped reguarly, ideally as soon as a new wasmtime-py version is released. To automate this process it is possible to use the whitequark/track-pypi-dependency-version script. YoWASP/runtime is an example of a project that automatically publishes releases on PyPI once a new version of wasmtime-py is released if it passes the testsuite.

Usage

In this example, we compile and instantiate a WebAssembly module and use it from Python:

from wasmtime import Store, Module, Instance, Func, FuncType

store = Store()
module = Module(store.engine, """
  (module
    (func $hello (import "" "hello"))
    (func (export "run") (call $hello))
  )
""")

def say_hello():
    print("Hello from Python!")
hello = Func(store, FuncType([], []), say_hello)

instance = Instance(store, module, [hello])
run = instance.exports(store)["run"]
run(store)

Be sure to check out the examples directory, which has other usage patterns as well as the full API documentation of the wasmtime-py package.

If your WebAssembly module works this way, then you can also import the WebAssembly module directly into Python without explicitly compiling and instantiating it yourself:

# Import the custom loader for `*.wasm` files
import wasmtime.loader

# Assuming `your_wasm_file.wasm` is in the python load path...
import your_wasm_file

# Now you're compiled and instantiated and ready to go!
print(your_wasm_file.run())

Components

The wasmtime package has initial support for running WebAssembly components in Python with high-level bindings. WebAssembly components are defined by the component model and are a flagship feature under development for Wasmtime and its bindings. Components enable communication between the host and WebAssembly guests with richer types than the numerical primitives supported by core WebAssembly. For example with a component Python can pass a string to wasm and back.

Components are represented as *.wasm binaries in the same manner as core WebAssembly modules. With a component binary you can generate Python bindings with:

$ python -m wasmtime.bindgen the-component.wasm --out-dir the-bindings

An example of using this can be done with the wasm-tools repository. For example with this core wasm module at demo.wat:

(module
  (import "python" "print" (func $print (param i32 i32)))
  (memory (export "memory") 1)

  (func (export "run")
    i32.const 100   ;; base pointer of string
    i32.const 13    ;; length of string
    call $print)

  (data (i32.const 100) "Hello, world!")
)

and with this *.wit interface at demo.wit:

world demo {
  import python: interface {
    print: func(s: string)
  }

  default export interface {
    run: func()
  }
}

And this demo.py script

from demo import Demo, DemoImports, imports
from wasmtime import Store

class Host(imports.Python):
    def print(self, s: str):
        print(s)

def main():
    store = Store()
    demo = Demo(store, DemoImports(Host()))
    demo.run(store)

if __name__ == '__main__':
    main()
$ wasm-tools component new demo.wat --wit demo.wit -o demo.wasm
$ python -m wasmtime.bindgen demo.wasm --out-dir demo
$ python demo.py
Hello, world!

The generated package demo has all of the requisite exports/imports into the component bound. The demo package is additionally annotated with types to assist with type-checking and self-documentation as much as possible.

Contributing

See CONTRIBUTING.md.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

wasmtime-10.0.1-py3-none-win_amd64.whl (4.4 MB view details)

Uploaded Python 3Windows x86-64

wasmtime-10.0.1-py3-none-manylinux2014_aarch64.whl (6.4 MB view details)

Uploaded Python 3

wasmtime-10.0.1-py3-none-manylinux1_x86_64.whl (6.5 MB view details)

Uploaded Python 3

wasmtime-10.0.1-py3-none-macosx_11_0_arm64.whl (4.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

wasmtime-10.0.1-py3-none-macosx_10_13_x86_64.whl (5.1 MB view details)

Uploaded Python 3macOS 10.13+ x86-64

wasmtime-10.0.1-py3-none-any.whl (4.4 MB view details)

Uploaded Python 3

File details

Details for the file wasmtime-10.0.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: wasmtime-10.0.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 4.4 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for wasmtime-10.0.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 1d3b8aef4c19118323fbcff23bb74375be217aea4b19c15ae56d5f6a7b1372e1
MD5 4d4ef25e9970121557ac92ce1e2214b5
BLAKE2b-256 d82dc005a8d946f6503a9cbb4c78fa84a17849b44d009c2812223fd504bbb6f3

See more details on using hashes here.

File details

Details for the file wasmtime-10.0.1-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for wasmtime-10.0.1-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6df367783b716d701d3628db515d001abd512aa284519c913f3d24ac1045458a
MD5 f2ea1ff2767cea0c0dc1e7099dd0c414
BLAKE2b-256 b14d48c65d74c7cde17dedd0a3e0d26ba57afb5af6f17de9dc1c553fefb82902

See more details on using hashes here.

File details

Details for the file wasmtime-10.0.1-py3-none-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for wasmtime-10.0.1-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 064d202286c7637913ecc4b95e0f5507ffe8acda6cc011d38b7d52e066a85cd5
MD5 ff9500267fc470ed5a3661761b225340
BLAKE2b-256 b161dface8be21f264fb296ec9094e5a842b54b221a888b8e0903de747c31d87

See more details on using hashes here.

File details

Details for the file wasmtime-10.0.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wasmtime-10.0.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5768ba1e33188406123ae6a58f4b326351a67d81c17def4f71784a425db13418
MD5 ff19f2d51218b51b2fadeb934d9d04be
BLAKE2b-256 6406b2225e100802a36a8ec579bd0ff20db3fc23879b4218cbc2d698e033ed4c

See more details on using hashes here.

File details

Details for the file wasmtime-10.0.1-py3-none-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for wasmtime-10.0.1-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8a68facd6a24f165ea87c22c2f817f6344d7bb91e5d9aec515ec7881402e2cb3
MD5 7ba4caace6652103e6686e555bfbfd0c
BLAKE2b-256 d2be85c1ea42c908c9a2694a356f5afb7ef36f6b66e6829d79bc07d65ddfd035

See more details on using hashes here.

File details

Details for the file wasmtime-10.0.1-py3-none-any.whl.

File metadata

  • Download URL: wasmtime-10.0.1-py3-none-any.whl
  • Upload date:
  • Size: 4.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for wasmtime-10.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cfa1766001567a412ef9934893acfe87fe55ed54945721d7a3a287e97e00fa85
MD5 254f84cd3efc1ff7052f8241d7e0f66f
BLAKE2b-256 91c3ee0e8fa2276cedaad9be42a43eebcc075ed6950c3649bf888f2db888586b

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