PyO3/pyo3 · error
Abi3t builds are not supported on CPython targets before Pyt
Error message
Abi3t builds are not supported on CPython targets before Python 3.15
What it means
abi3t is the free-threaded stable ABI introduced for CPython 3.15+. PyO3's build script rejects abi3t targets on older CPython because the ABI simply does not exist there. Abi3 (non-t) remains allowed on older versions.
Source
Thrown at pyo3-ffi/build.rs:151
interpreter_config.target_abi().version() >= versions.min,
"the configured GraalPy interpreter version ({}) is lower than PyO3's minimum supported version ({})",
interpreter_config.target_abi().version(),
versions.min,
);
// GraalPy does not support abi3, so we cannot offer forward compatibility
if interpreter_config.target_abi().version() > versions.max {
let error = MaximumVersionExceeded::new(interpreter_config, versions.max);
return Err(error.finish().into());
}
}
PythonImplementation::RustPython => {}
}
if let PythonAbiKind::Stable(abi) = interpreter_config.target_abi().kind() {
match interpreter_config.target_abi().implementation() {
PythonImplementation::CPython => match abi {
StableAbi::Abi3t => {
ensure!(
interpreter_config.target_abi().version() >= PY_3_15,
"Abi3t builds are not supported on CPython targets before Python 3.15"
)
}
StableAbi::Abi3 => {}
},
PythonImplementation::PyPy => warn!(
"PyPy does not yet support {abi} so the build artifacts will be version-specific. \
See https://github.com/pypy/pypy/issues/3397 for more information."
),
PythonImplementation::GraalPy => warn!(
"GraalPy does not support {abi} so the build artifacts will be version-specific."
),
PythonImplementation::RustPython => {}
}
}
Ok(())View on GitHub (pinned to ac9b6899d3)
Solutions
- Build against CPython 3.15+ if abi3t is required
- Use plain abi3 (not abi3t) for pre-3.15 targets
- Remove the abi3t feature/flag from Cargo.toml or the PYO3 abi config
- Check the resolved abi via pyo3-build-config output before building
Example fix
// before (Cargo.toml)
pyo3 = { version = "0.23", features = ["abi3-t"] } # with python3.13
// after
pyo3 = { version = "0.23", features = ["abi3"] } Defensive patterns
Strategy: validation
Validate before calling
import sys
using_abi3t = "abi3-t" in open("Cargo.toml").read() # or track your feature flags
if using_abi3t:
assert sys.version_info[:2] >= (3, 15), "abi3t requires CPython 3.15+" Prevention
- Only enable abi3t features when building against 3.15+ interpreters
- Use plain abi3 for broad wheel compatibility
- Gate abi3t features behind cargo feature flags enabled only in new-interpreter CI jobs
When it happens
Trigger: Building with a stable-abi config of StableAbi::Abi3t while the configured interpreter's version is below PY_3_15 (e.g. setting PYO3_USE_ABI3_FORWARD_COMPATIBILITY-style abi3t flags or pyo3 abi3-t features against Python 3.13/3.14).
Common situations: Enabling free-threaded abi3 feature flags in Cargo.toml while compiling against a pre-3.15 interpreter; attempting forward-compatible free-threaded wheels prematurely.
Related errors
- Cannot target an abi3t version below {MINIMUM_SUPPORTED_VERS
- PyO3 does not support the free-threaded build of CPython ver
- Neither abi3 or abi3t features are enabled
- cannot set a minimum Python version {} higher than the inter
- Invalid config that sets both target_abi and abi3.
AI-assisted analysis of PyO3/pyo3@ac9b6899d3 (2026-09-05).
Data as JSON: /api/errors/cddd0ffe47923554.
Report an issue: GitHub.