Skip to main content

py-runner

License: AGPL-3.0-or-later Python >=3.10 TestPyPI

Persistent Python code runner: string in, JSON out. A lightweight, dependency-free, ipykernel-like execution library — no Jupyter server, no ZMQ, no required third-party packages.

from py_runner import Kernel

k = Kernel()
k.execute("x = 40 + 2")
print(k.execute("x + 1"))
# {"output": null,
#  "display": [{"type": "text/plain", "data": "43"}],
#  "error": null, "execution_count": 2, "execution_time": 0.0001}

Install

pip install py-runner-kernel
# Opt-in stacks (core stays dependency-free):
pip install "py-runner-kernel[data]"   # pandas, numpy, matplotlib, pillow, tqdm
pip install "py-runner-kernel[ml]"     # scikit-learn, torch
pip install "py-runner-kernel[full]"   # everything incl. opencv, plotly

Requires Python >= 3.10.

Quickstart

from py_runner import Kernel, execute, execute_json

# Module-level shared kernel
execute("import math")
print(execute_json("math.sqrt(16)"))

# Isolated session kernel (one per user/request)
k = Kernel(on_input=lambda prompt: "bob", max_history=100)
r = k.execute('name = input("who? ")\nname.upper()')
assert r["display"][0]["data"] == "'BOB'"

Each result is a JSON-serializable dict:

key value
output captured stdout (str | None)
display rich values ([{type, data}]: text/plain, text/html, image/png base64, …)
error traceback / warning text (str | None)
execution_count incrementing cell number
execution_time seconds (float)

Features

  • Persistent namespace with Jupyter-style _, __, ___ and bounded Out[N] history
  • Last-expression display — DataFrames as HTML, arrays/tensors summarized, matplotlib figures as PNG, trailing ; suppresses output
  • Magics: %time, %timeit, %who/%whos, %run, %pip, !shell, %reset
  • Long runs: timeout=, cooperative interrupt(), on_stream chunks, on_heartbeat for silent fit() loops, tqdm \r collapsing, logging/warnings capture
  • Sandboxing: allow_shell=False, allow_pip=False, set_address_space_limit(mb) (Unix), reset(keep_imports=True)
  • CLI: py-runner -c "1+1", py-runner script.py, ... | py-runner, with --timeout, --no-shell, --no-pip

CLI

py-runner -c "print(2 + 3)"
py-runner analysis.py --timeout 300 > result.json
cat cell.py | py-runner
python -m py_runner -c "1+1"

Project structure

py_runner/
├── __init__.py   # public API: Kernel, execute, execute_json, reset, main
├── kernel.py     # persistent execution kernel (threaded, timeouts, input)
├── magics.py     # %time, %pip, !shell, … (sandbox-flaggable)
├── display.py    # rich display collector (pandas/numpy/PIL/matplotlib)
├── streams.py    # thread-routed streaming stdout, tqdm \r handling
└── utils.py      # guarded imports, address-space limit helper

Development

uv sync            # create .venv
uv run python -c "from py_runner import execute; print(execute('1+1'))"
uv build           # wheel + sdist in dist/
uv publish --publish-url https://test.pypi.org/legacy/  # trial run

License

AGPL-3.0-or-later — see LICENSE. Note the network clause (§13): if you serve a modified version over a network, you must offer its source to those users.

Metadata

Release files for py-runner-kernel 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for py-runner-kernel 0.1.0
File Size Uploaded Provenance Actions
py_runner_kernel-0.1.0.tar.gz 23.9 kB Without provenance Details for py_runner_kernel-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for py-runner-kernel 0.1.0
File Interpreter ABI Platform Actions
py_runner_kernel-0.1.0-py3-none-any.whl Python 3 none any Details for py_runner_kernel-0.1.0-py3-none-any.whl

Total release size: 50.7 kB

Release files / py_runner_kernel-0.1.0.tar.gz

Download URL py_runner_kernel-0.1.0.tar.gz
Size 23.9 kB
Tags Source
SHA-256 checksum
How to use checksums
3776e0aba5662f75f31d4f7db60ba1c514686ae2efebfadc541f6738acbe1d0e
BLAKE2b-256 checksum
How to use checksums
7a41fda6b02a587b6765c06353c59267639e260cf2da1d7b79aa3386eaa5f52d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / py_runner_kernel-0.1.0-py3-none-any.whl

Download URL py_runner_kernel-0.1.0-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3e600ca15e316f9de34a7f851d93e94349c35c42fd4b8429e8bcd4e40a3d015a
BLAKE2b-256 checksum
How to use checksums
4170ffc8db0847f139fd2f6d43116a60deaab27f5bc07a3d047fdd0fad6de487
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for py-runner-kernel 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page