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.8+ 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

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

wasmtime-16.0.0-py3-none-win_amd64.whl (3.8 MB view details)

Uploaded Python 3Windows x86-64

wasmtime-16.0.0-py3-none-manylinux2014_aarch64.whl (4.7 MB view details)

Uploaded Python 3

wasmtime-16.0.0-py3-none-manylinux1_x86_64.whl (4.8 MB view details)

Uploaded Python 3

wasmtime-16.0.0-py3-none-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

wasmtime-16.0.0-py3-none-macosx_10_13_x86_64.whl (4.5 MB view details)

Uploaded Python 3macOS 10.13+ x86-64

wasmtime-16.0.0-py3-none-any.whl (3.8 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for wasmtime-16.0.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 bda01ca65fc64f0787b28334d564e7919158a6a1e4555ae3e874d1c96a5fd554
MD5 54067470d1bd4e6f37036d300076981c
BLAKE2b-256 234c083739f10948c02e31ebc4630ef0f78f1f55dc5a058c5e0b217b14a24fb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-16.0.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 62d3460dc27cc427743b2d7064eb91136477d30821c95abb7a218cb01a66537f
MD5 2243431719e5d565f13dfd2111911732
BLAKE2b-256 0c209b20af11e4bf0dc6be4f2cf9984bb33828979ca03af59f0281241ffe4fa8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-16.0.0-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 18c3fcc100e60c39023eae61c2cef367afb307d413bfea7783019faedb45139c
MD5 30b8cfaabff3ec3eba3663d51d66e06b
BLAKE2b-256 44a6bde446b4fe075fd58038bef0611d5d6ca7077070add3f43ff92dc6e825ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-16.0.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e0cb2c606ac941ee28f3a7b4234c66eaf4672e88b101a6ed0b76a55bccec15f7
MD5 20d359eb7d34c5cd8f0d38a17311d8a7
BLAKE2b-256 e5905e2d12cf2f443cc76dc3cab18273fe3cef67047fc02a61b47c285b3e50eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-16.0.0-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4420e3a10ff74d2c2f71dfa066f29f45571c109837b49ec26a1c36526ce4b8cc
MD5 441bb09db778f55be42fb80c985babe3
BLAKE2b-256 4f01edb4606a9f2fd4aa7bdf953f3b4dd7b279d29740da6910fa2b2b34eea174

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wasmtime-16.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 832feb5d86c40415f727785a7dde0f847ff4cbd43c5cd3e9cf7b8f2718a56d2b
MD5 90486bda87204fd876cce045261ac2b3
BLAKE2b-256 8faabf841393d85a50e6f42128a77c89212d94e6ec6941db212ce1c1e280dfab

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