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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3macOS 14.0+ x86-64

pyrlang-0.1.3-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.3-py3-none-win_amd64.whl.

File metadata

  • Download URL: pyrlang-0.1.3-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.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 dd29c65208230a94467c21005b10682d42cc3c9276a10197f97a9b89081804e1
MD5 86fb3872bb5c3073f5f5e9012ab7cca5
BLAKE2b-256 e5dd41afa9d85a46cec74123110a6372394d2b9a48179a99cd15c4751ca2311b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrlang-0.1.3-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7413bf8710b3ce091e401c1518232a97d296471ce7057be3b248257e6be69fbe
MD5 bf630775cc3393565d8351be4935cc24
BLAKE2b-256 a81e762090d14c9cf2f86fafc82ec6c82e34223eb76b6f9b5cbc3ccff7690502

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrlang-0.1.3-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9b7fdca1fff950eb4860236bf376501be71468f550c9a90032afcfc38daedb84
MD5 e83cc7089698a9fd5c6d93df3552ac42
BLAKE2b-256 59419fa6eab66f7401bd721f4cfc1ccbf5603ec6bfbd3c5e279207b40ec2971f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrlang-0.1.3-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4d4a6d9621ea54a806c89dce7cca676e7067c742dceb38ad02a984209c565a27
MD5 1fa8c8d9d837e9f677edcd0bdef4e288
BLAKE2b-256 2aea27fcdc552c4a1f9d65a8a0633b089010c7f13f03beee61e5a77b0c73e82c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrlang-0.1.3-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4fb010e72e810e0b0f32322ca7889e62f8621ff400f4bb74d308f45aca47ce53
MD5 085f59cd5d3e9d72b711a819f8653cdb
BLAKE2b-256 54ce8ba372798f39c15425460b2ea5f543641f99dcee07d814208f054e516297

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrlang-0.1.3-py3-none-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 1c5237f5cc137affb86430f8aebf49e5a7beeea0f89dde681cda02a59177b85b
MD5 f4109a7126b8d50111775ce48b9bd5a3
BLAKE2b-256 10c09a2fdaefa184e3dad76812ac8609d0a7e4dfbd6834079dd0d12975457212

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for pyrlang-0.1.3-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 660255f2e149ef36148e5024d6c606d2b43f711d114ab23760a95e1c4ab8f6aa
MD5 3aed560b245c933f1ab79f3d7bde8e1b
BLAKE2b-256 73de29b5291876def95e1e2ca960fbfd4c275a49abc8e852bd43e39eb20bbcef

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrlang-0.1.3-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