c2py23
All code in this repository was generated by DeepSeek V4 and other large language models, in collaboration with jonwright.
Wrap C99 functions as Python C extensions via the buffer protocol.
One compiled .so works on Python 2.7 through 3.15 with no recompilation.
Zero copies, zero allocations. No numpy required.
Install
pip install c2py23
Requires a C99 compiler (gcc, clang, or MSVC on Windows). No Python dependencies beyond stdlib.
Quick Start
Create a C function:
/* arraysum.c */
#include <stdint.h>
int array_sum(const double *a, const double *b, double *out, intptr_t n) {
for (intptr_t i = 0; i < n; i++) out[i] = a[i] + b[i];
return n;
}
Write the interface file:
# arraysum.c2py
{
"module": "arraysum",
"source": ["arraysum.c"],
"functions": [
{
"py_sig": "array_sum(a: buffer, b: buffer, out: buffer) -> int",
"checks": [
"a.format == 'd'",
"b.format == 'd'",
"out.format == 'd'",
],
"c_overloads": [
{
"sig": "array_sum(const double *a, const double *b, double *out, intptr_t n) -> int",
"map": {
"a": "a.ptr",
"b": "b.ptr",
"out": "out.ptr",
"n": "a.n",
},
},
],
},
],
}
Build and use:
# Generate the wrapper
c2py23 arraysum.c2py -o arraysum_wrapper.c
# Compile (dlsym mode -- portable, no libpython)
cc -shared -fPIC -I c2py23/runtime/ arraysum_wrapper.c arraysum.c \
c2py23/runtime/c2py_runtime.c -ldl -lm -o arraysum.so
# Or build via setuptools
python setup.py build_ext --inplace
python3 -c "
import ctypes, sys; sys.path.insert(0, '.')
import arraysum
a = (ctypes.c_double * 4)(1, 2, 3, 4)
b = (ctypes.c_double * 4)(5, 6, 7, 8)
r = (ctypes.c_double * 4)(0, 0, 0, 0)
arraysum.array_sum(a, b, r)
print(list(r)) # [6.0, 8.0, 10.0, 12.0]
"
Usage
c2py23 file.c2py -o wrapper.c # generate C wrapper
c2py23 file.c2py # print to stdout
c2py23 --version # print version
c2py23 file.c2py -o wrapper.c --emit-header # also emit c2py.h alongside the wrapper
c2py23 --regenerate-header # regenerate c2py.h from runtime sources
# Or via python -m:
python -m c2py23 file.c2py -o wrapper.c
See c2py23/setuptools_helper.py for PythonhBuildExt setuptools helper (pythonh mode only).
Supported Platforms
Linux (x86_64, aarch64, gcc/clang/tcc/zig), macOS (aarch64, clang), Windows (x64/i386, MSVC/MinGW). Free-threaded Python 3.13+ supported.
Examples
The GitHub repository includes build examples (not in the PyPI sdist):
examples/kissfft_wrap/-- real + complex FFT over float buffersexamples/lz4_wrap/-- compress/decompress over byte buffersexamples/simd_dispatch/-- CPU feature dispatch (SSE2/AVX2/AVX-512, NEON, Altivec)examples/threading_bench/-- GIL release, free-threading, OpenMPexamples/wheel_demo/-- multi-platform wheel packagingexamples/cmake_demo/,examples/meson_demo/-- build system integration
Documentation
- c2py23 docs -- user guide, spec, examples, developer guide
docs/specification.md-- full.c2pygrammar, supported types, architecturedocs/user_guide.md-- thread safety, wheel packaging, GIL release, timingdocs/getting_started.md-- installation and first builddocs/developer_guide.md-- testing with snakepit containers, CI, ABI matrixAGENTS.md-- contributor guidelines for LLM agents
License
MIT. See LICENSE.
Release files for c2py23 0.5.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| c2py23-0.5.6.tar.gz | 155.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| c2py23-0.5.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 261.0 kB
Release files / c2py23-0.5.6.tar.gz
| Download URL | c2py23-0.5.6.tar.gz |
|---|---|
| Size | 155.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cf820aa56846c9f381d6defc3cb89fd67e9aff9a5be5e8b68aeef1a14584881f
|
|
BLAKE2b-256 checksum How to use checksums |
d3f130851e360ae4afd774f190a5209ccf765f042c109b8ca3d86d8f4b7f7d71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / c2py23-0.5.6-py3-none-any.whl
| Download URL | c2py23-0.5.6-py3-none-any.whl |
|---|---|
| Size | 105.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e4d69b362a53b779b93955cb505b84295777ef7f1e5fc7552ccd048159caebf7
|
|
BLAKE2b-256 checksum How to use checksums |
dc0ebcf443c09b343ed2ea1af18ec7571081cf1ef38c5aae1a07c96bf1905f49
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|