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 コードを書かせてくれます。

C API チュートリアル

このチュートリアルでは、Python C API、つまりこのバージョンの CPython に付属する基本的な手段を使って、C や C++ で単純なモジュールを書く方法を説明します。

  1. 初めての C API 拡張モジュール

中級トピックのガイド

ガイドのこの節ではサードパーティツールの補助無しに C および C++ 拡張を作成する方法を説明します。 これは自分自身の C 拡張を作成するおすすめの方法というよりも、主にそれらのツールを作成する人向けのものです。

大規模なアプリケーションへの Python ランタイムの埋め込み

Python インタープリタをメインアプリケーションとして、その中で実行する拡張を作るよりも、大きなアプリケーションの中に CPython ランタイムを組み込む方が望ましい場合があります。 この節では、そのために必要な詳細の一部を説明します。