Skip to main content

Python implemented on the BEAM, packaged with Erlang/OTP

Project description

Pyrlang

Pyrlang is Python implemented on the BEAM, primarily in Erlang/OTP.

The project goal is not to build a CPython package, a python -m runner, or a Python library that mimics Erlang. Pyrlang source is parsed, loaded, evaluated, interpreted, or compiled by BEAM-resident runtime code.

Current repository contents:

  • SPEC.md: language and runtime semantics.
  • WEB.md: Pyrunicorn WSGI target architecture.
  • src/: BEAM-native Erlang runtime modules.
  • test/: EUnit tests for the current runtime slice.
  • bin/: BEAM-native escript entrypoints for pyrlang and pyrunicorn.
  • include/: shared Erlang definitions.
  • Makefile: plain erlc/erl build and test entrypoint.

Implemented foundation:

  • Actor-local heaps and mutable container/object references.
  • Message export/import with copied mutable values and cyclic object graphs. Native stdlib objects that close over actor-local state or BEAM resources are marked unsendable and surface as Pyrlang TypeError through source-level send().
  • BEAM actor primitives: spawn, send, receive, selective receive, call/reply, source-level links, monitors, demonitoring, linked spawn, exit trapping, registration, source-level receive timeouts, and explicit atom-safe Erlang calls through erlang.apply.
  • Parser/evaluator subset for expressions, assignments, functions, classes, methods, attributes, subscripts, decorators, if/elif/else, while, for, try/except/finally, with, yield, lambdas, boolean operators, membership, identity comparisons, simple slices, keyword/default arguments, *args/**kwargs, call expansion, range, and list/dict/set comprehensions.
  • Literal support for None, booleans, integers, floats, strings, bytes, tuples, lists, dicts, and sets.
  • Object model foundation: classes, instances, descriptors, bound methods, and C3 MRO, including super(), property, staticmethod, classmethod, and callable instances plus arithmetic/comparison special-method dispatch. Class suites execute supported Pyrlang statements including nested classes, imports, conditionals, loops, exception handlers, and context managers.
  • Basic metaclass creation and inherited metaclass selection through class C(metaclass=...) and type(name, bases, attrs).
  • Dynamic object helpers: getattr, setattr, hasattr, isinstance, issubclass, and type(obj) for Pyrlang instances.
  • BEAM-backed open() for basic file read/write/close and context-manager use, with live file handles marked as actor-local unsendable resources.
  • Actor-local module/package loading/imports from .py and __init__.py source files, with .pyr accepted as a legacy project-local extension, plus BEAM-native erlang, os, re, hashlib, hmac, secrets, contextvars, weakref, threading, importlib, datetime, decimal, logging, pathlib, http.cookies, urllib.parse, and email.utils modules, plus a minimal actor-backed sqlite3 DB-API surface.
  • Pyrlang exception values with catch/raise flow, StopIteration, catchable attribute/subscript/operator errors, and bare raise re-raising the active exception inside exception handlers.
  • Generator objects, the user-visible __iter__/__next__ protocol, and source-level mutable list/dict operations, including iter, list, tuple, dict, and set constructors.
  • One-for-one supervisor foundation.
  • Actor-backed SQLite access through an Erlang port to sqlite3, with connection-scoped transactions, DB-API connection/cursor objects marked as actor-local resources, and connection actor crashes mapped to DB-API operational errors.
  • Pyrunicorn WSGI environ/worker/http/server foundation that loads Pyrlang module:callable apps inside worker actors, provides basic WSGI stream objects with sized and line reads, supports iterable response bodies and the start_response write callable including exc_info replacement before headers are sent, threads configured and socket-derived WSGI environ values such as SERVER_PORT and REMOTE_ADDR into Pyrlang-source apps, isolates worker module globals, returns 400 responses for malformed requests and 500 responses for app and worker failures, reads Content-Length bodies across TCP packets, serves over a real TCP socket with a round-robin worker pool, restarts crashed workers, and boots a small Pyrlang-source Django-shaped WSGI shim with a minimal middleware chain.
  • BEAM-native bin/pyrlang and bin/pyrunicorn escript wrappers. pyrunicorn accepts --bind, --workers, --django-settings-module, and --path.
  • pyrlang -m module ... executes a module or package __main__.py through the Pyrlang runtime and exposes arguments through the BEAM-native sys.argv.

Run the current verification suite:

make test

Build and refresh executable entrypoint bits:

make entrypoints

This repository implements the current scoped contracts in SPEC.md and WEB.md: Python-syntax Pyrlang source running on BEAM-resident runtime code, actor-backed runtime behavior, and Pyrlang-source WSGI on BEAM-native Pyrunicorn. Larger Python and Django compatibility areas remain outside the current scope until the specifications are expanded.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pyrlang-0.1.1-py3-none-win_amd64.whl (47.0 MB view details)

Uploaded Python 3Windows x86-64

pyrlang-0.1.1-py3-none-musllinux_1_2_x86_64.whl (34.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

pyrlang-0.1.1-py3-none-musllinux_1_2_aarch64.whl (33.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

pyrlang-0.1.1-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (33.5 MB view details)

Uploaded Python 3manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pyrlang-0.1.1-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (32.2 MB view details)

Uploaded Python 3manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

pyrlang-0.1.1-py3-none-macosx_15_0_x86_64.whl (15.7 MB view details)

Uploaded Python 3macOS 15.0+ x86-64

pyrlang-0.1.1-py3-none-macosx_15_0_arm64.whl (23.2 MB view details)

Uploaded Python 3macOS 15.0+ ARM64

File details

Details for the file pyrlang-0.1.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: pyrlang-0.1.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 47.0 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyrlang-0.1.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2d94bf738ee54b3455f5cc5f43193fc3b7e623017485bfc0a79f72f29bf7ea53
MD5 83702ab5878556a97f9307ad9a0a7293
BLAKE2b-256 3c35845d7b6854612de0b4f33ccdb403e13965a0556280d392b0ab25c0330d8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.1-py3-none-win_amd64.whl:

Publisher: release.yml on grantjenks/pyrlang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrlang-0.1.1-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8bf8a6d5a6d2bece8264d59d2169804788b7d94cd40f986f511470cbfc494a78
MD5 e78eadadc993494cbc640bbccb1426b0
BLAKE2b-256 fb26cfff4d86c67d83d46d326c6b3bc6e4139ecc006fced64488669ddfcbd04e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.1-py3-none-musllinux_1_2_x86_64.whl:

Publisher: release.yml on grantjenks/pyrlang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrlang-0.1.1-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 dea62c4c72565864be059d95fc7180e72e2c36f40aefd82a1b6d289a25405eff
MD5 92c872bf6680401599eaed935236c70e
BLAKE2b-256 cfb9464ad01e74cb4d26a7ab34960844338b3fe690371edc58058f4436440207

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.1-py3-none-musllinux_1_2_aarch64.whl:

Publisher: release.yml on grantjenks/pyrlang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrlang-0.1.1-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.1-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef39c47110916e8b9ea6823e9bac0f88b0317db6fc8af54a712e8d168150e2d0
MD5 f9adfa8bc6a7ba3bb5348cbf2eb5ed22
BLAKE2b-256 afa91906eb23d6173fd3ec10d2ab1a6f8af0b325fecc6fe76527baafa893e70a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.1-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on grantjenks/pyrlang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrlang-0.1.1-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.1-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d09a988481f7aeb288c5cb7b272eb142a02aab677fe7cb08b1af21c2aa2a39a2
MD5 f09ca995ce572567ab70cd555e6fda75
BLAKE2b-256 63a1a0a5d3eebfc993ecd688f29738fc1413f40653a658c1079378be06a55645

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.1-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on grantjenks/pyrlang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrlang-0.1.1-py3-none-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.1-py3-none-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 3f68ec0d54491c07d998e63296742be35fb1b90dfb51f238c68bb9771e005c67
MD5 caac46555fd0a04bffc781c69da4be71
BLAKE2b-256 d4638560cdf24d6e2a0d47a51770ed4511fef95581661c4cf56a868f1b86980e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.1-py3-none-macosx_15_0_x86_64.whl:

Publisher: release.yml on grantjenks/pyrlang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrlang-0.1.1-py3-none-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.1-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0e137f8e7aa139e3abe6c42ac4ccb29b97f79aa148ecd1bb731e5cd1f171a3be
MD5 1f10ca65fdec99a9bb528bb9069ee9a0
BLAKE2b-256 03d6922575461b4ba023714ff5b797cff68543b9cf77c4d8373414167510c927

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.1-py3-none-macosx_15_0_arm64.whl:

Publisher: release.yml on grantjenks/pyrlang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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