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
# 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.
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 c2py23-0.5.3.tar.gz.
File metadata
- Download URL: c2py23-0.5.3.tar.gz
- Upload date:
- Size: 147.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d67f8e6f8d2e55702a77fd5cce39796754efe75c207b2f4e313f0ba44b4db331
|
|
| MD5 |
c2387291d1581ae79aae75f41fb7d521
|
|
| BLAKE2b-256 |
5810ec56f848f1ad6b9e73db1a2917cb71185acd443b54b7b6602c45da5cb4c6
|
File details
Details for the file c2py23-0.5.3-py3-none-any.whl.
File metadata
- Download URL: c2py23-0.5.3-py3-none-any.whl
- Upload date:
- Size: 99.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fcf5499e0cbcf5120374c96a9d42eb598948690285753f6cb4df193c85c21f6
|
|
| MD5 |
43819c1ac3d15138a6e08d047c216949
|
|
| BLAKE2b-256 |
169951913d462ae2fb09f2b75cb87bc2b5876c19f0c7fc7a2f0055bae9b38525
|