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-7.0.0-py3-none-win_amd64.whl (4.5 MB view details)

Uploaded Python 3Windows x86-64

wasmtime-7.0.0-py3-none-manylinux2014_aarch64.whl (6.5 MB view details)

Uploaded Python 3

wasmtime-7.0.0-py3-none-manylinux1_x86_64.whl (6.6 MB view details)

Uploaded Python 3

wasmtime-7.0.0-py3-none-macosx_11_0_arm64.whl (4.3 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

wasmtime-7.0.0-py3-none-macosx_10_13_x86_64.whl (5.2 MB view details)

Uploaded Python 3macOS 10.13+ x86-64

wasmtime-7.0.0-py3-none-any.whl (4.5 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for wasmtime-7.0.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 3dc36f5cd941777c1a93c358718c056178ab052c870bb0706a64bbc526b5a074
MD5 e91c7311ee71ad4957874dbf416bfc5b
BLAKE2b-256 c8a96b3c350d259979eb7b565c7138f46ec121d1bffcc644da475c80c79c3387

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-7.0.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f9936872a44c250255ab7887f86edc1b940db557be5a0d9875895d00f7110cb1
MD5 ab3a1c0161be3ce05b59de98fcbca887
BLAKE2b-256 fd4a7044c619dcf354ed914fd1cb933f96653cf56b283a8a9c02a4119e652d12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-7.0.0-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 eefc8d0f0d13395eb5e52a8bf2d64b960255f11120a40c33cf34b45528cb19d5
MD5 31aea3e23947f9b6f934ab228819f09e
BLAKE2b-256 83c2fb24197c058d5fa696f6ce46627063bf439cab29fc2c880da141d71bbfaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-7.0.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de32a9d42d4654cb7664a3346929701f612dd99e772d9142fe32ca7eae3234bb
MD5 fe7290225bc00980f649fcafc79a850e
BLAKE2b-256 6745ab9188e68078bdcdb7e825c33849ea4d1438b7447cf63a0c8a6e48bd47fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-7.0.0-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 18e1647d6928e85817e2265e166ae99d13197e99160943eadaab38bf22cf0dc8
MD5 d9ebc51447b2d68514b94845d50de2ec
BLAKE2b-256 c5b391bb524f19e6fa5d12d165f3b05d1ac5d86e358f0661980c4c27e16e70a3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wasmtime-7.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 627e3919928d2f54ddcd05f66e70a102ad27617486939046be6cd56aca8a0e0b
MD5 d44e0aff72f904c0d7ed7e2e865ef0fa
BLAKE2b-256 3b5b5958f1c77aa891cbc592221039a3787d8dd942fab606dca9e5030d769f0b

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