Стабильный прикладной двоичный интерфейс

Традиционно C API Python будет меняться с каждым выпуском. Большинство изменений будут совместимы с исходным кодом, как правило, только добавляя API, а не изменяя существующий API или удаляя API (хотя некоторые интерфейсы удаляются после первой отмены).

К сожалению, совместимость API не распространяется на двоичную совместимость (ABI). Причина заключается прежде всего в эволюции определений структуры, где добавление нового поля или изменение типа поля может не нарушить API, но может нарушить ABI. Как следствие, модули расширения необходимо перекомпилировать для каждой версии Python (хотя в Unix возможно исключение, если ни один из затронутых интерфейсов не является используемым). Кроме того, в Windows модули расширений связываются с определенной pythonXY.dll и должны быть перекомпилированы для связи с более новой.

С Python 3.2 объявляется подмножество API для гарантии стабильного ABI. Модули расширения, желающие использовать этот API (называемый «ограниченным API»), должны определять Py_LIMITED_API. Ряд деталей интерпретатора затем скрывается от модуля расширения; в возвращаемом собранного модуля, работающего на любой версии 3.x (x>=2) без повторной компиляции.

В некоторых случаях необходимо расширить стабильную ABI новыми функциями. Модули расширения, желающие использовать эти новые API, должны устанавливать Py_LIMITED_API в PY_VERSION_HEX значение (см. Версионирование API и ABI) минимальной версии Python, которую они хотят поддерживать (например, 0x03030000 для Python 3.3). Такие модули будут работать на всех последующих версиях Python, но не будут загружаться (из-за отсутствия символов) на более старых версиях.

Начиная с Python 3.2, набор функций, доступных ограниченному API, документирован в PEP 384. В документации C API элементы API, которые не являются частью ограниченного API, помечены как «Не являются частью ограниченного API».