abi3 wheels would allow us to build for our lowest supported Python version only (currently 3.8), while still being compatible with higher versions. This would allow to produce a single artifact per target plaform/arch rather than a wheel per platform/arch/version: https://pyo3.rs/v0.14.5/building_and_distribution#py_limited_apiabi3
It is also what polars does currently
Pros:
Less artifacts to build
Faster CI (much smaller wheel build check matrix)
A potential downside could be a performance cost. To quote PyO3's docs:
The downside of this is that PyO3 can't use optimizations which rely on being compiled against a known exact Python version. It's up to you to decide whether this matters for your extension module.
We'd have to run a benchmark with both types of wheels in Python 3.12 to check the impact of this, but since our API is quite simple, we shouldn't see a difference
abi3
wheels would allow us to build for our lowest supported Python version only (currently 3.8), while still being compatible with higher versions. This would allow to produce a single artifact per target plaform/arch rather than a wheel per platform/arch/version: https://pyo3.rs/v0.14.5/building_and_distribution#py_limited_apiabi3It is also what polars does currently
Pros:
A potential downside could be a performance cost. To quote PyO3's docs:
We'd have to run a benchmark with both types of wheels in Python 3.12 to check the impact of this, but since our API is quite simple, we shouldn't see a difference