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

  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.