You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.1 KiB

# Using WebAssembly from Python
Wasmtime [is available on PyPI](https://pypi.org/project/wasmtime/) and can be
used programmatically or as a python module loader, which allows almost any
WebAssembly module to be used as a python module. This guide will go over adding
Wasmtime to your project, and some provided examples of what can be done with
WebAssembly modules.
Make sure you've got Python 3.5 or newer installed locally, and we can get
started!
## Getting started and simple example
First, copy this example WebAssembly text module into your project. It exports a
function for calculating the greatest common denominator of two numbers.
```wat
{{#include ../examples/gcd.wat}}
```
Next, install the [Wasmtime package](https://pypi.org/project/wasmtime/) from
PyPi. It can be installed as a dependency through Pip or related tools such as
Pipenv.
```bash
pip install wasmtime
```
Or
```bash
pipenv install wasmtime
```
After you have Wasmtime installed and you've imported `wasmtime`, you can import
WebAssembly modules in your project like any other python module.
```python
import wasmtime.loader
import gcd
print("gcd(27, 6) =", gcd.gcd(27, 6))
```
This script should output
```bash
gcd(27, 6) = 3
```
If this is the output you see, congrats! You've successfully ran your first
WebAssembly code in python!
You can also alternatively use the [`wasmtime` package's
API](https://bytecodealliance.github.io/wasmtime-py/):
```python
from wasmtime import Store, Module, Instance
store = Store()
module = Module.from_file(store, 'gcd.wat')
instance = Instance(module, [])
gcd = instance.get_export('gcd')
print("gcd(27, 6) =", gcd(27, 6))
```
## More examples and contributing
The `wasmtime` Python package currently [lives in its own repository outside of
`wasmtime`](https://github.com/bytecodealliance/wasmtime-py) and has a [number
of other more advanced
examples](https://github.com/bytecodealliance/wasmtime-py/tree/master/examples)
as well. Feel free to browse those, but if you find anything missing don't
hesitate to [open an
issue](https://github.com/bytecodealliance/wasmtime-py/issues/new) and let us
know if you have any questions!