Skip to main content

Zig-first Python extensions with cross-compiled wheels

Project description

  ▜ ▜          ▌
▀▌▐ ▐ ▛▌▛▘▛▌▛▌▛▌▀▌
█▌▐▖▐▖▙▌▙▖▙▌▌▌▙▌█▌

Alloconda is Zig-first Python extensions with cross-compiled wheels.

Commands

alloconda build

Build the extension via zig build, detect the PyInit_* symbol, and copy the compiled library into the Python package directory.

uvx alloconda build

Options:

  • --release: use -Doptimize=ReleaseFast
  • --module: override the PyInit_* module name
  • --lib: path to a prebuilt library
  • --package-dir: where to install the extension
  • --ext-suffix: override the extension suffix (useful for cross builds)
  • --zig-target: Zig target triple for cross builds
  • --python-include: cross-build Python include path
  • --no-init / --force-init: control __init__.py generation

alloconda wheel

Build a wheel by staging the package, copying the compiled extension, and writing dist-info metadata. This is intentionally lightweight and targets the common PEP 427 path.

uvx alloconda wheel --python-tag cp312 --abi-tag cp312 --manylinux 2_28 --arch x86_64

Options:

  • Tag selection: --python-tag, --abi-tag, --platform-tag
  • Manylinux/musllinux helpers: --manylinux, --musllinux, --arch
  • --python-version / --pbs-target: use cached python-build-standalone headers
  • --ext-suffix: override the extension suffix for cross builds
  • --out-dir: wheel output directory (default: dist/)
  • --skip-build: skip zig build if you already built the library

wheel-all downloads missing headers by default. Use --no-fetch to require a pre-populated cache. If --python-tag is omitted, it defaults from --python-version (e.g. cp314).

alloconda wheel-all

Build a full wheel matrix across common platforms and Python versions.

uvx alloconda wheel-all --python-version 3.14 --include-musllinux

Options:

  • --python-version (repeatable) or --all for every available version
  • --target to override the default platform list
  • --include-windows to add Windows targets (experimental)
  • --no-fetch to disable automatic header downloads
  • --dry-run to print the matrix

alloconda develop

Build and install the project in editable mode via pip install -e . (or uv pip).

uvx alloconda develop

Options:

  • --release: use -Doptimize=ReleaseFast
  • --module: override the PyInit_* module name
  • --lib: path to a prebuilt library
  • --package-dir: where to install the extension
  • --ext-suffix: override the extension suffix
  • --zig-target: Zig target triple for cross builds
  • --python-include: cross-build Python include path
  • --skip-build: skip the zig build step (requires existing output)
  • --no-init / --force-init: control __init__.py generation
  • --pip-arg: extra args passed through to pip (repeatable)
  • --uv: use uv pip (auto-selected if pip is missing)

alloconda init

Scaffold a Zig project for an alloconda Python extension module.

uvx alloconda init

This creates build.zig, build.zig.zon, src/root.zig, and a default package directory at python/<project_name>/__init__.py.

Options:

  • --name to override the project name
  • --module-name to override the Python extension module name
  • --dir to choose a target directory
  • --alloconda-path to use a local checkout or git+https URL
  • --force to overwrite existing files

If --alloconda-path is omitted, alloconda is fetched from GitHub and pinned in build.zig.zon.

If pyproject.toml exists, the build backend stanza is added automatically.

alloconda inspect

Inspect built wheels (inspect) or libraries (inspect-lib) and print derived metadata. Useful for quick sanity checks in scripts.

uvx alloconda inspect dist/zigadd-0.1.0-*.whl --verify
uvx alloconda inspect-lib zig-out/lib/libzigadd.dylib

alloconda python fetch

Fetch and cache python-build-standalone headers for cross builds.

uvx alloconda python fetch --version 3.14 --manylinux 2_28 --arch x86_64

The cache location can be overridden with ALLOCONDA_PBS_CACHE or --cache-dir.

Build backend

Add this to pyproject.toml to use alloconda as a build backend:

[build-system]
requires = ["alloconda"]
build-backend = "alloconda.build_backend"

Configuration

Alloconda reads optional defaults from pyproject.toml:

[tool.alloconda]
module-name = "_zigadd"
package-dir = "zigadd"
python-version = "3.14"
optimize = "ReleaseFast"
python-tag = "cp314"
abi-tag = "cp314"
manylinux = "2_28"
arch = "x86_64"
include = ["*.pyi"]
exclude = ["tests/*"]

Release is the default. Use --debug to build with -Doptimize=Debug; optimize only affects release builds. CLI flags and PEP 517 --config-settings override these values.

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

alloconda-0.0.1a5.tar.gz (26.5 kB view details)

Uploaded Source

Built Distribution

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

alloconda-0.0.1a5-py3-none-any.whl (35.7 kB view details)

Uploaded Python 3

File details

Details for the file alloconda-0.0.1a5.tar.gz.

File metadata

  • Download URL: alloconda-0.0.1a5.tar.gz
  • Upload date:
  • Size: 26.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for alloconda-0.0.1a5.tar.gz
Algorithm Hash digest
SHA256 524fc2c046c4b25378b744c91b79dd213778af2bfe277e901e75d55dbd6fa788
MD5 6574ba31e5c2976bb438cc3b8f0d5a4a
BLAKE2b-256 76024f38dda00da1e3fb4f6befb2e9267b1a91d4b23ad87944028e84747a2280

See more details on using hashes here.

File details

Details for the file alloconda-0.0.1a5-py3-none-any.whl.

File metadata

  • Download URL: alloconda-0.0.1a5-py3-none-any.whl
  • Upload date:
  • Size: 35.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for alloconda-0.0.1a5-py3-none-any.whl
Algorithm Hash digest
SHA256 e878e7cbfca7112127008bd21a5a64f9be37ec4a25417be0d1b2bd07e5a66359
MD5 3fb4c1c3193179d1755129932f6bd0ec
BLAKE2b-256 39679f7b32b6c20a75996df175c342465bed7854a55142f57c92376a84dc3df2

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