Python インタプリタの拡張と埋め込み¶
このドキュメントでは、C や C++ で新しいモジュールを書いて Python インタープリタを拡張する方法を説明します。 これらのモジュールは、関数、オブジェクト型、メソッドの定義など、Python コードでできることに加え、ネイティブライブラリとの連携や、インタープリタのオーバーヘッドを避けた高速化も行えます。 また、Python を拡張言語として使うために、別のアプリケーションに Python インタープリタを組み込む方法も説明します。 最後に、OS が実行時の動的ロードをサポートしている場合に、インタープリタにロードできるよう拡張モジュールをコンパイル・リンクする方法を示します。
このドキュメントは、C と Python の基礎知識を前提としています。 Python の入門には Python チュートリアル を参照してください。 Python 言語リファレンス には、より厳密な言語の定義があります。 Python 組み込み機能リファレンス は組み込み関数とオブジェクト型を説明し、Python 標準ライブラリ は Python の幅広い用途を支えるモジュール (組み込みモジュールと Python で書かれたモジュールの両方) を説明します。
Python/C API 全体の詳しい説明は、別のドキュメントである、 Python/C API リファレンスマニュアル を参照してください。
Python の C API (Application Programmers Interface) は、拡張をサポートするため、Python ランタイムのほとんどの機能にアクセスする関数、マクロ、変数を定義しています。
C のソースファイルでは、ヘッダー "Python.h" をインクルードすることで Python API を使えます。
注釈
C 拡張のインターフェイスは CPython に固有のものであり、これによる拡張モジュールはほかの Python 実装では動作しません。多くの場合、C 拡張を書くことを避けてほかの Python 実装のために移植性を確保することは可能です。たとえば、あなたがしたいことが C ライブラリの関数やシステムコールを呼び出すことである場合、 ctypes あるいは cffi ライブラリの利用を検討すべきです。これらのモジュールは C コードとインターフェイスし、C 拡張を書いてコンパイルするのに較べて Python 実装間のより高い移植性をもった Python コードを書かせてくれます。
おすすめのサードパーティツール¶
このドキュメントでは、このバージョンの CPython に付属する、拡張を作成するための基本的な手段だけを扱います。 Python 用の C や C++ の拡張を、より簡単かつ高度な方法で作成できる サードパーティーツール もあります。
拡張の作者を対象としたドキュメントですが、これらのツールの作者にも役立つでしょう。 例えば、チュートリアルのモジュールは、ビルドツールの単純なテストケースや、コード生成器に期待する出力の例として使えます。
C API チュートリアル¶
このチュートリアルでは、Python C API、つまりこのバージョンの CPython に付属する基本的な手段を使って、C や C++ で単純なモジュールを書く方法を説明します。
中級トピックのガイド¶
ガイドのこの節ではサードパーティツールの補助無しに C および C++ 拡張を作成する方法を説明します。 これは自分自身の C 拡張を作成するおすすめの方法というよりも、主にそれらのツールを作成する人向けのものです。
大規模なアプリケーションへの Python ランタイムの埋め込み¶
Python インタープリタをメインアプリケーションとして、その中で実行する拡張を作るよりも、大きなアプリケーションの中に CPython ランタイムを組み込む方が望ましい場合があります。 この節では、そのために必要な詳細の一部を説明します。