Skip to main content

Python bindings for QuickJS

Project description

Tests

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, and BigInt between 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-build for 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quickjs_runtime-0.2.6.tar.gz (13.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

quickjs_runtime-0.2.6-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86-64

quickjs_runtime-0.2.6-cp312-cp312-macosx_15_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

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

Hashes for quickjs_runtime-0.2.6.tar.gz
Algorithm Hash digest
SHA256 db0f1f991cf8b57b102a551b379bf219abc00af791df37a20b978bc35d150f5f
MD5 b8d8be6ef39f1df5317726c66f5232c1
BLAKE2b-256 d113e2cea1812f6d3b5aea2d6b9e2b67544b8652157e65493701f2eed164ed4f

See more details on using hashes here.

File details

Details for the file quickjs_runtime-0.2.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for quickjs_runtime-0.2.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4022a837e18be7158a285d3e3d82d216423b86c3a97874fa87adb99c2474e97c
MD5 7df3294358ceed7e6bea161e69bfb83c
BLAKE2b-256 8d86c95cd03ce4d88e1129b2f6b8fa3aed5cf00df101afc5434f73b83df1cb2a

See more details on using hashes here.

File details

Details for the file quickjs_runtime-0.2.6-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for quickjs_runtime-0.2.6-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 18162c4a912f0f0f517febb345e2f2389c2e82838d16bf8dd21bf1bebb8c2ce1
MD5 3fd2c07da0d7a190025a29742b2a87d8
BLAKE2b-256 f67c5f3675cbc370de32a345ed6279be261121a91faa41e01ebea9961e6ae5ce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page