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.9+ on x86_64 Windows, macOS, and Linux, as well as on arm64 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:

package my:demo

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

  export run: func()
}

And this demo.py script

from demo import Root, RootImports, imports
from wasmtime import Store

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

def main():
    store = Store()
    demo = Root(store, RootImports(Host()))
    demo.run(store)

if __name__ == '__main__':
    main()
$ wasm-tools component embed demo.wit demo.wat -o demo.wasm
$ wasm-tools component new demo.wasm -o demo.component.wasm
$ python -m wasmtime.bindgen demo.component.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

wasmtime-27.0.1-py3-none-win_amd64.whl (5.0 MB view details)

Uploaded Python 3 Windows x86-64

wasmtime-27.0.1-py3-none-musllinux_1_2_x86_64.whl (6.4 MB view details)

Uploaded Python 3 musllinux: musl 1.2+ x86-64

wasmtime-27.0.1-py3-none-manylinux1_x86_64.whl (6.4 MB view details)

Uploaded Python 3

wasmtime-27.0.1-py3-none-macosx_11_0_arm64.whl (5.3 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

wasmtime-27.0.1-py3-none-macosx_10_13_x86_64.whl (5.8 MB view details)

Uploaded Python 3 macOS 10.13+ x86-64

wasmtime-27.0.1-py3-none-any.whl (5.0 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for wasmtime-27.0.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 e691aafe8881a872a69a52822f24c209f54fe6f06154d1dfadd977ee86374169
MD5 6a1476beedbae55bc3c11c30b50c74ed
BLAKE2b-256 146ff6b99d9ab1511398686e00d2a26371d99a7949531514379d731b3b7e6309

See more details on using hashes here.

File details

Details for the file wasmtime-27.0.1-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for wasmtime-27.0.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 83a85f9038edb39293854bf063d364e4a6bcaec460a890763bf33120787dbb20
MD5 9dec7672e6eb28b0d8b0dc832daac86e
BLAKE2b-256 031d3cee7908ba892be5a74c55dfe87871e94be1aa6cd5a4ca25948060f6f16b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-27.0.1-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dac4e2232cc44b6bfc290f84ff9244621b7e99ee1da4036afb83113dd93b13bf
MD5 0b58fb673903d8db71478d90432436fa
BLAKE2b-256 3a57cd877b4797be239b4433f89a5a85c7bf2c5319dd91c7777b1867bebb664e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-27.0.1-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 99339ed56b7bc4d280bcb0d5527725a7cfe51c269941cf888f57b46f05c249a6
MD5 ba651f5e87da9e398b1c57c3eb112d11
BLAKE2b-256 5e24806c5bd1b5e30c83cc9d182795edebfbfe24483f82fb18823b309a6656b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-27.0.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1082442529d06c5c50fb9377dbb599460c175f98ca0d332625bf76661c7309b4
MD5 91a9fbfc97d4e384527b35ddf111c71a
BLAKE2b-256 6ed838d1af31c1787e09642354c81215920a5bf59722a6786ed7e9622fd1f033

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-27.0.1-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 31c882bb246ccc059afe8ef3fdde242b7e63dd1f13693b952bf2de92831848a9
MD5 cfb61a24c6deb467de761d030af18e4d
BLAKE2b-256 7ceb54889f4b799b1b345dcc169e80b363758cbb0092a3241a66284366f75e98

See more details on using hashes here.

File details

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

File metadata

  • Download URL: wasmtime-27.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for wasmtime-27.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 96c06c62c66581eb3fd0dc81e4d9e625a8203c08e3b57972cf9967cf395d2e47
MD5 82818f16e70888eff3659f318f9e5a91
BLAKE2b-256 1d0cfd5c2a652210b03ea9a143033d2be21e33580e48d54060bea88b46c042ad

See more details on using hashes here.

Supported by

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