# Python インタプリタの拡張と埋め込み

このドキュメントでは、Pythonインタプリンタを拡張する新しいモジュールをで C またはC++ で書く方法を解説しています。このようなモジュールでは新しい関数を定義するだけではなく、新しい型や、そのメソッドを定義することができます。ドキュメントでは他のアプリケーションでPythonを拡張言語として使用するために、Pythonインタプリタをアプリケーションに埋め込む方法についても解説します。最後に、下層のオペレーティングシステムが動的(実行時)ロードをサポートしていれば、拡張モジュールが動的にライブラリにロードされるように、モジュールをコンパイルしリンクする方法について解説します。

このドキュメントでは、読者は Python について基礎的な知識を持ち合わせているものと仮定しています。形式ばらない Python 言語の入門には、 Python チュートリアル を読んでください。 Python 言語リファレンス を読めば、 Python 言語についてより形式的な定義を得られます。また、 Python 標準ライブラリ では、Python に広い適用範囲をもたらしている既存のオブジェクト型、関数、および (組み込み、および Python で書かれたものの両方の) モジュールについて解説しています。

Python/C API 全体の詳しい説明は、別のドキュメントである、 Python/C API リファレンスマニュアル を参照してください。

## おすすめのサードパーティツール

This guide only covers the basic tools for creating extensions provided as part of this version of CPython. Some third party tools offer both simpler and more sophisticated approaches to creating C and C++ extensions for Python.

## サードパーティツールなしで拡張を作る

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

参考

PEP 489 -- Multi-phase extension module initialization

- 1. C や C++ による Python の拡張
  - 1.1. 簡単な例
  - 1.2. 幕間小話: エラーと例外
  - 1.3. 例に戻る
  - 1.4. モジュールのメソッドテーブルと初期化関数
  - 1.5. コンパイルとリンク
  - 1.6. C から Python 関数を呼び出す
  - 1.7. 拡張モジュール関数でのパラメタ展開
  - 1.8. 拡張モジュール関数のキーワードパラメタ
  - 1.9. 任意の値を構築する
  - 1.10. 参照カウント法
  - 1.11. C++での拡張モジュール作成
  - 1.12. 拡張モジュールに C API を提供する
- 2. 拡張の型の定義: チュートリアル
  - 2.1. 基本的なこと
  - 2.2. 基本のサンプルにデータとメソッドを追加する
  - 2.3. データ属性をこまかく制御する
  - 2.4. 循環ガベージコレクションをサポートする
  - 2.5. 他の型のサブクラスを作る
- 3. 拡張の型の定義: 雑多なトピック
  - 3.1. ファイナライズとメモリ解放
  - 3.2. オブジェクト表現
  - 3.3. 属性を管理する
  - 3.4. オブジェクトの比較
  - 3.5. 抽象的なプロトコルのサポート
  - 3.6. 弱参照(Weak Reference)のサポート
  - 3.7. その他いろいろ
- 4. C および C++ 拡張のビルド
  - 4.1. setuptools による C および C++ 拡張のビルド
- 5. Windows 上での C および C++ 拡張モジュールのビルド
  - 5.1. 型どおりのアプローチ
  - 5.2. Unix と Windows の相違点
  - 5.3. DLL 使用の実際

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

Python インタープリタの中でメインアプリケーションとして実行される拡張を作るのではなく、 CPython をより大きなアプリケーションの中に埋め込む方が望ましいことがあります。 この節ではその上手い埋め込みに関わる詳細について説明します。

- 1. 他のアプリケーションへの Python の埋め込み
  - 1.1. 高水準の埋め込み
  - 1.2. 超高水準の埋め込みから踏み出す: 概要
  - 1.3. 純粋な埋め込み
  - 1.4. 埋め込まれた Python の拡張
  - 1.5. C++による Python の埋め込み
  - 1.6. Unix 系システムにおけるコンパイルとリンク