Python bindings for QuickJS
Project description
python-quickjs-runtime
A lightweight Python binding for the QuickJS Javascript Engine.
This library allows you to execute JavaScript code within your Python applications, providing seamless interoperability between Python and JavaScript.
Features
- Evaluate JavaScript: Run JS code strings directly from Python.
- ES2023 Support: Support for modern JS features including
async/await. - Data Exchange: Pass
int,float,str,bool,list,dict, andBigIntbetween Python and JS. - Python Callbacks: Call Python functions directly from JavaScript.
- REPL: Includes a simple interactive shell for testing JS snippets.
- Easy Build: Uses
zigcc-buildfor reliable cross-platform compilation.
Installation
You can install the package from the source:
pip install .
Usage
Basic Evaluation
from quickjs_runtime import Runtime
rt = Runtime()
ctx = rt.new_context()
# Evaluate simple expressions
result = ctx.eval("1 + 2")
print(result) # 3
# Evaluate strings
greeting = ctx.eval("'Hello ' + 'World'")
print(greeting) # "Hello World"
Interoperability
You can set global variables in the JavaScript context and retrieve results.
from quickjs_runtime import Runtime
rt = Runtime()
ctx = rt.new_context()
# Set variables
ctx.set("x", 10)
ctx.set("y", 20)
# Use them in JS
result = ctx.eval("x * y")
print(result) # 200
Calling Python from JavaScript
You can pass Python functions to the JavaScript context.
from quickjs_runtime import Runtime
def add(a, b):
return a + b
rt = Runtime()
ctx = rt.new_context()
ctx.set("py_add", add)
# Call the Python function from JS
result = ctx.eval("py_add(5, 7)")
print(result) # 12
Custom Filenames and Stack Traces
You can provide a filename to eval for better error messages.
from quickjs_runtime import Runtime
rt = Runtime()
ctx = rt.new_context()
try:
ctx.eval("throw new Error('oops')", filename="my_script.js")
except RuntimeError as e:
print(e) # error message containing 'my_script.js'
Async/Await Support
Wait for Promises to settle using eval_sync.
from quickjs_runtime import Runtime
rt = Runtime()
ctx = rt.new_context()
script = """
async function fetchData() {
return "done";
}
fetchData();
"""
# eval_sync will run the job queue until all promises are settled
ctx.eval_sync(script)
REPL
The package includes a simple REPL (Read-Eval-Print Loop).
python -m quickjs_runtime
Development
This project uses zigcc-build to compile the C extensions. This ensures a consistent build environment without needing to install system-wide C compilers.
To build and install locally:
python -m build
pip install dist/*.whl
To run tests:
pytest
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 Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quickjs_runtime-0.2.6.tar.gz.
File metadata
- Download URL: quickjs_runtime-0.2.6.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db0f1f991cf8b57b102a551b379bf219abc00af791df37a20b978bc35d150f5f
|
|
| MD5 |
b8d8be6ef39f1df5317726c66f5232c1
|
|
| BLAKE2b-256 |
d113e2cea1812f6d3b5aea2d6b9e2b67544b8652157e65493701f2eed164ed4f
|
File details
Details for the file quickjs_runtime-0.2.6-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: quickjs_runtime-0.2.6-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4022a837e18be7158a285d3e3d82d216423b86c3a97874fa87adb99c2474e97c
|
|
| MD5 |
7df3294358ceed7e6bea161e69bfb83c
|
|
| BLAKE2b-256 |
8d86c95cd03ce4d88e1129b2f6b8fa3aed5cf00df101afc5434f73b83df1cb2a
|
File details
Details for the file quickjs_runtime-0.2.6-cp312-cp312-macosx_15_0_arm64.whl.
File metadata
- Download URL: quickjs_runtime-0.2.6-cp312-cp312-macosx_15_0_arm64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.12, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18162c4a912f0f0f517febb345e2f2389c2e82838d16bf8dd21bf1bebb8c2ce1
|
|
| MD5 |
3fd2c07da0d7a190025a29742b2a87d8
|
|
| BLAKE2b-256 |
f67c5f3675cbc370de32a345ed6279be261121a91faa41e01ebea9961e6ae5ce
|