zython
v0.20.4
Published
zython -- Web Assembly Python for Node.js and the Browser, built using Zig
Downloads
1
Readme
python-wasm: WebAssembly CPython for Node.js and the browser
DEMOS:
- https://zython.cocalc.com (uses Atomics)
- https://zython.org (uses Service Workers)
See the main repo for more information.
Using from node.js
Install the package:
npm install python-wasm
The library should work with nodejs version 16.x on Linux, MacOS, and native Microsoft Windows. (NOTE: for node 14, use the --experimental-wasm-bigint
flag.)
wstein@max % node
Welcome to Node.js v16.13.0.
Type ".help" for more information.
> python = require('python-wasm')
> await python.init();
> await python.exec('a = sum(range(101)); print(a)') # outputs to stdout
5050
> s = await python.repr('a'); s # javascript string
5050
> await python.exec('import sys; print(sys.version)')
'3.11.0b3 (main, Jul 8 2022, 23:21:07) [Clang 13.0.1 ([email protected]:ziglang/zig-bootstrap.git 81f0e6c5b902ead84753490d'
> await python.repr('sys.platform')
"'wasi'"
You can also start a full session with readline support (yes, this is real!):
$ node
> require('python-wasm').terminal()
>>> 2+3 # you can edit with readline!
5
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> quit() or ctrl+d
Using in a web application
See this repo for how to use Webpack5 with python-wasm.
API
The python-wasm
module exports:
exec(code:string)
- execute code (output goes to /dev/stdout and /dev/stderr)repr(expr:string)
- return representation of an expression as a stringterminal
- start interactive Python terminal that has full readline support