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.6-py3-none-win_amd64.whl (47.0 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

pyrlang-0.1.6-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.6-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.6-py3-none-macosx_14_0_x86_64.whl (13.6 MB view details)

Uploaded Python 3macOS 14.0+ x86-64

pyrlang-0.1.6-py3-none-macosx_14_0_arm64.whl (13.7 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: pyrlang-0.1.6-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.6-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 51451ac629815a0e71888a36202806ff1d6a9e1768feed69892ba75cd72721c1
MD5 587b3f07ed4942e8b16ebb7d5ac755f5
BLAKE2b-256 07778c2ca86368421e9621db485a8af733f3fa90820fa5178d1621a4fc3edb9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.6-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.6-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.6-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 762d8ab4239b737e4ed12abe3cdc20816cd51ca2b05dac281d032806e01cffbe
MD5 c3068c2be0b971c1c637bda2887d55db
BLAKE2b-256 db4058fde336e9c1ce323a47d57d6b8f1bcd36e781ba99df2a8846d811be2821

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.6-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.6-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.6-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e7d9c82cc6a6ea71f71abca9c8189cada91a4428f6298bdab687c11ca77486e1
MD5 9963f7897c904391fb1505ceefd9a642
BLAKE2b-256 f51985cb2d9c0d9c63e8341fca3b7d0a646a68a6aed30dd3cec69e456aad5f83

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.6-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.6-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.6-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 84f73c3ab85c3f371b2280fdf5271581b22f01bd3e4b70c914247bf8a15dcf1c
MD5 f771d156a02d2ad3da23aa651f6cb5a2
BLAKE2b-256 0900e581c8a5cc4d2d3210c62516dd07cddbe13fc2de5a3644146f572ab74bdb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.6-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.6-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.6-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8362b2b1476e0afe5cffd6dcfd21f4b9b09823d9db9bcfa647884a9b254c53ba
MD5 768b2774aece68367f1108433b9cdf72
BLAKE2b-256 0afd088fe98774c4c9a408439c73d4d088b64dadbec016b7a83389eb3a388fff

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.6-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.6-py3-none-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.6-py3-none-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 2325493a1e271bb6c9b18bcd64879eb695877001f132e2b631e794bc96e7da85
MD5 c501c183811708d3d847cdbb41c21e6a
BLAKE2b-256 048de3f3a5bf9e4a26fe5e733a858afc699161aabfa44cba98537ea40350edad

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.6-py3-none-macosx_14_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.6-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pyrlang-0.1.6-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f5674ba5896ea52f2304ad799d72bfb7c5f3bdb6deabd0c996b615a51e4a613c
MD5 7ec206b43cf9d847c1857c3e7fb45253
BLAKE2b-256 2a9d99c066d41978b4c3e6f76ce72aacdec63bd9a28ab81f7d2ecb16517dc978

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.6-py3-none-macosx_14_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