A setuptools extension, for building cpython extensions with zig build, enabling source-only pip distributions that compile at install time.
- Python 50.9%
- Zig 49.1%
| src | upgrade the runner to zig 16 | |
| .gitignore | add zig code | |
| build.zig | move addVersion from python-zon in here | |
| build.zig.zon | upgrade to zig 0.16.0 | |
| LICENSE | add first code | |
| README.md | move addVersion from python-zon in here | |
| setup.py | upgrade to zig 0.16.0 | |
| setuptools_zig_build.py | add integration to store dependencies in sdist | |
Setuptools zig build
A setuptools extension, for building cpython extensions with zig build, enabling simple source-only pip distributions that compile at install time. This is my take on deinventing the wheel
check out zig-zon for a full example.
Example
Your project needs to have:
setup.pyto configure this setuptools extension to run during python's wheel buildbuild.zigto configure the build of the shared librarybuild.zig.zonoptionally - to specify zig dependencies
from setuptools import Extension
from setuptools import setup
setup(
name='zig-zon',
packages=[],
zig_build={
# stores zig's depdendency pacakges in python's sdist. This requires a call to
# CPython.addSdistList(b); in `build.zig`
# If set to False, potential dependencies will be downloaded by zig instead.
"sdist": True,
# tries to import 'ziglang' to get a zig compiler when building wheel
"use_ziglang_python_package": True,
# passes -Doptimize= to zig build
"optimize": "ReleaseSmall",
# passes -Dversion=<pip package version> to zig build
"pass_version_option": True,
# extra arguments to zig build. In this case we pass the `install` and `test` steps
'extra_args': [
"install", "test",
],
},
# Names of the libraries your `build.zig` will produce, and this module will install
ext_modules=[Extension('zig_zon', [])],
)
References
@ruamel and setuptools-zig