ステーブルABI(Stable Appliction Binary Interface)

伝統的にPythonのC APIはリリース毎に変更されます。多くの変更はソース互換性を保っていて、既存のAPIを変更したり取り除いたりすることはありません(ただし、いくつかのAPIは、一旦非推奨と指定された後に、削除されます)。

残念ながらAPIの互換性はバイナリレベルの互換性(ABI)までには適用されません。その理由は主に、構造体フィールドの新規追加や型の変更によって、たとえAPIは崩れなくてもABIは崩れてしまうからです。その結果として、拡張モジュールをPythonのリリース毎に再コンパイルする必要があります(Unixでその影響を受けるインターフェイスが使用されていない場合は例外かもしれませんが)。また、Windowsでは、何らかのpythonXY.dllとリンクしている拡張モジュールは、再コンパイルした後に新しいdllとリンクし直す必要があります。

Python 3.2 以降。ステーブルABIを保証するためのAPIサブセットが宣言されています。拡張モジュールでこのAPI(limited APIと呼ばれます)を使うには``Py_LIMITED_API`` を定義してください。拡張モジュールの細部は大部分隠蔽され、代わりに再コンパイルなしにバージョン3.x(x>=2)上で動くモジュールがビルドされます。

いくつかのケースでは、ステーブルABIを新しい関数で拡張する必要があります。 これらの新しいAPIを使用したい拡張モジュールは、 Py_LIMITED_API に サポートしたい最小のPythonバージョンの``PY_VERSION_HEX`` の値 (API と ABI のバージョニング を参照) を設定してください。 (例えば Python3.3 なら 0x03030000 )。 モジュールは後続のすべての Pythonリリースで動作しますが、(シンボルが存在しないため)、古いリリースでは動作しません。

Python 3.2 時点では、limited APIはPEP 384に文書化されています。C APIのドキュメントでは、limited APIの一部でないAPIは、 “Not part of the limited API” とマークされています。