Evaluate abi3 wheels: one wheel per platform and day-one support for new Python releases
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Domain
- build-system, performance
Research direction
Start with pyproject.toml and the maturin-action configuration, then build an abi3 wheel locally. Run examples/performance/compile_execute_benchmark.py, focusing on size(items) and timestamp cases, followed by the full test suite. Done means posting the comparison numbers and deciding whether the datetime performance trade-off supports switching.
Written by the indexing model from the issue text.
Description
Context
CI builds one wheel per (platform × Python version): currently 4 CPython versions across 10 platform targets, growing by 10 wheels every October. Users on a Python that shipped after our last release fall back to the sdist and need a Rust toolchain.
Building against the stable ABI (pyo3/abi3-py311) gives one wheel per platform that works on every CPython ≥ 3.11, including ones released after us.
Trade-offs to measure before switching
- Performance. Under abi3, PyO3 loses some fast paths. The one most likely to matter here is datetime: the
chronoconversion used fortimestamp/durationvalues goes through the C datetime API on regular builds but through Python-level attribute access under the limited API.size(items)on a 1000-element list and the timestamp cases inexamples/performance/compile_execute_benchmark.pyare the numbers to compare. If abi3 costs more than ~10% on timestamp-heavy workloads, keep per-version wheels. - Free-threading. abi3 wheels cannot target the free-threaded build, so if we want
cp314twheels (see the GIL issue) we would ship abi3 for the default build plus explicitcp314twheels. - Reproducibility. The
--find-interpreterflag inmaturin-actionbecomes unnecessary;pyproject.tomlgains[tool.maturin] features = ["pyo3/extension-module", "pyo3/abi3-py311"].
Suggested approach
Build an abi3 wheel locally, run the benchmark and the full test suite against it, and post the numbers here. Decide based on the datetime cases.
- Dominant language
- Python
- Stars
- 43
- Forks
- 4
- Avg merge
- 9h 57m
- Merged PRs (30d)
- 14
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from hardbyte/python-common-expression-language
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 45/100
-
Difficulty 5/5 Over a week Newbie friendliness 35/100
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 48/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 45/100
All issues in hardbyte/python-common-expression-language
Similar issues
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
canonical/paas-charm#368 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
tech debt
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
StevenBlack/hosts#3256 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
qualcomm/qai-appbuilder#275 ·