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

Uploaded Python 3Windows x86-64

wasmtime-18.0.0-py3-none-manylinux2014_aarch64.whl (4.5 MB view details)

Uploaded Python 3

wasmtime-18.0.0-py3-none-manylinux1_x86_64.whl (4.5 MB view details)

Uploaded Python 3

wasmtime-18.0.0-py3-none-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

wasmtime-18.0.0-py3-none-macosx_10_13_x86_64.whl (4.3 MB view details)

Uploaded Python 3macOS 10.13+ x86-64

wasmtime-18.0.0-py3-none-any.whl (3.6 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for wasmtime-18.0.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c76b1d97dae06afadc6e960d5ab9626d88404f779da038347da7cf66cef4e74e
MD5 83a2cc95ee1989bc2151e2d3759a6e07
BLAKE2b-256 ffede64d118aa9efd9907bd552873f4faeadfdd4c00e5036f92f5378c7ee88b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-18.0.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d22e1ac6804e5175b8c98976e93e62dbd097d87d18ab2b306a50560a336680e3
MD5 d479421f638b69964406b8e9bbeb570e
BLAKE2b-256 2b614bc0da89a1b4b5be612bf610aedb43d31386deadde72b6db811402771bcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-18.0.0-py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b7b3d5a152b572df48c89cdfd14ae53a03eacaeb5476661470640eade98829b1
MD5 6ebfbf03961a2e72f50de4a8e259ad47
BLAKE2b-256 dc26195eb22ac66f67736cdf941bad4a84c1ab0725044aacba96b3b7c2297ad0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-18.0.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af6d54470b3dacc3607d554e356b00cc6ebc002793f3db4fdc60a2cbe3af9694
MD5 f6858729aeb2afebbbd37f52f671dab4
BLAKE2b-256 be564d89d38dbaf3ef14d7d3c7820ceb7ada53b889153020b7bd9438e659cc07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for wasmtime-18.0.0-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 543435f24dd951ac9145481a2f61c9416bea149c4879ed174af9b0d1bae1d5e8
MD5 368908e16b19d707a058bd9a32f3746f
BLAKE2b-256 843bec695d41827791f9d30d3bebbcf3bf237ef79348d8bd1518aa978456c408

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wasmtime-18.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0bdb0aa5f742d457efe39e1c494a26b8c26718aea90aeae15680ff2bae9ff06e
MD5 e22c0448138d99102876f3525cf2545f
BLAKE2b-256 b6fa4e40bd6816da303f5fd2a5a62bbdbb0444f1f86f2c4e450edb4f5ad11ea4

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