PyO3/pyo3 · error

Abi3t builds are not supported on CPython targets before…

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.

Solutions

  1. Build against CPython 3.15+ if abi3t is required
  2. Use plain abi3 (not abi3t) for pre-3.15 targets
  3. Remove the abi3t feature/flag from Cargo.toml or the PYO3 abi config
  4. 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

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


AI-assisted analysis of PyO3/pyo3@ac9b6899d3 (2026-09-05). Data as JSON: /api/errors/cddd0ffe47923554. Report an issue: GitHub.

Appendix: 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)