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 thePyInit_*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__.pygeneration
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: skipzig buildif you already built the library--no-fetch: disable automatic header downloads
Missing python-build-standalone headers are fetched automatically when
--python-version is specified. 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--allfor every available version--targetto override the default platform list--include-windowsto add Windows targets (experimental)--no-fetchto disable automatic header downloads--dry-runto 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 thePyInit_*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__.pygeneration--pip-arg: extra args passed through to pip (repeatable)--uv: useuv 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:
--nameto override the project name--module-nameto override the Python extension module name--dirto choose a target directory--alloconda-pathto use a local checkout orgit+httpsURL--forceto 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file alloconda-0.0.1a6.tar.gz.
File metadata
- Download URL: alloconda-0.0.1a6.tar.gz
- Upload date:
- Size: 26.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1e090dcdc6f890904f63e0d126bc1c3968a8c8c13063e91c287713f7d53ee00
|
|
| MD5 |
3fed28ab0bd00efd5274a061bd6f5df2
|
|
| BLAKE2b-256 |
5f01129f687a7a5bbd4b7d7e7ac54f1bf37ff7d1b7b9ca2568a26e21d22e6ddf
|
File details
Details for the file alloconda-0.0.1a6-py3-none-any.whl.
File metadata
- Download URL: alloconda-0.0.1a6-py3-none-any.whl
- Upload date:
- Size: 36.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7a9ff35c5a4a3a78d5a2c32244edce19d0c9643d4dcd7756715ba1e2c8cbf53
|
|
| MD5 |
9450191f461acf4819501add47fb7410
|
|
| BLAKE2b-256 |
d6bed4bc81eac1495005f0a768fa7a1fcc3832de8ac92cc0522d7d249fbec218
|