Python

Python 运行时已经有几种不同的语言实现,其中一些支持 WebAssembly。本文档将描述如何在 WasmEdge 上运行 RustPython 来执行 Python 程序。

编译 RustPython

要编译 RustPython,你应该在你的机器上安装 Rust 工具链。并且应该启用 wasm32-wasi 平台支持。

  1. rustup target add wasm32-wasi

然后你可以使用下面的命令来克隆和编译 RustPython:

  1. git clone https://github.com/RustPython/RustPython.git
  2. cd RustPython
  3. cargo build --release --target wasm32-wasi --features="freeze-stdlib"

为了能够在二进制文件中包含 Python 标准库,需要启用 freeze-stdlib 特性。输出文件可以在 target/wasm32-wasi/release/rustpython.wasm 找到。

AOT 编译

WasmEdge 支持将 WebAssembly 字节码程序编译为机器码以获得更好的性能。强烈建议在运行前将 RustPython 编译为机器码。

  1. wasmedgec ./target/wasm32-wasi/release/rustpython.wasm ./target/wasm32-wasi/release/rustpython.wasm

从 0.9.0 开始,WasmEdge引入了通用 Wasm 二进制格式。所以你可以使用 .wasm 扩展来生成跨运行时兼容的格式,或者使用 .so 来生成 Linux 共享库格式。

运行

  1. wasmedge ./target/wasm32-wasi/release/rustpython.wasm

然后你可以在 WebAssembly 中得到一个 Python shell 交互解释器!

授予文件系统访问权限

可以预先打开目录,让 WASI 程序有权限读写真机上存储的文件。以下命令将当前工作目录挂载到 WASI 虚拟文件系统。

  1. wasmedge --dir .:. ./target/wasm32-wasi/release/rustpython.wasm