Python
In Faasm we do this with Python via a set of custom C-extensions and decorators to support theFaasm host interface provided in ,and use CPython compiled to WebAssembly with Pyodide.
Python support is not enabled by default. To enable the Python runtime you must set up the relevantenvironment variables:
The first time the system runs it will generate machine code for CPython and all thePython C-extensions. This can take around a minute.
Running a Python function
An example Python function is found at . This can be uploadedand invoked from the Faasm CLI with:
- inv upload python hello --py
- inv invoke python hello --py
This should give a message and the version of Python being run.
- from pyfaasm.code import await_call, chain_this, faasm_func, faasm_main
- @faasm_func(1)
- pass
- @faasm_func(2)
- def func_two():
- pass
- @faasm_main
- def main_func():
- call_one = chain_this(1)
- call_two = chain_this(2)
- await_call(call_one)
- await_call(call_two)
Building CPython
Note that this is only relevant for building the Python support from scratch.
Python 3.7
We need a native version of exactly the right Python 3.7, not necessarily the latest.You need to install it with the python3_7.yml
playbook. It will install a copy of pythonat /usr/local/faasm/python3.7
You must make sure that you've set up the latest toolchain, build libc and malloc etc. (see local dev docs).
Once this is done, you can run the following:
cd third-party/pyodide
cd cpython
cd ../packages
make clean && make
Setting up the runtime environment
Once this is all built we can put the relevant files in place in a new terminal session at the root of the project:
inv python.set-up-runtime
If this doesn't work you can do the following:
- Create a new folder in
pyodide/packages
- Copy the
meta.yml
from another pure Python package (e.g. ) - Add the right version, SHA and a link to the
.tar.gz
from PyPI (perf example ) - From the
packages
directory run../bin/pyodide buildpkg —package_abi=0 <your_pkg>/meta.yaml
This will automatically create a basic meta.yml
.
You can then build it with:
./bin/pyodide buildpkg --package_abi=0 packages/<pypi pkg name>/meta.yaml
Once added, we need to include this in the Faasm runtime root:
- Open
- Add a new entry in the dictionary of Python packages in there
- Make sure you use the right file path to the built package in pyodide
You can then set it up with:
- inv python.set-up-package <pkg name>