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++ で単純なモジュールを書く方法
を説明します。

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


中級トピックのガイド
====================

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

* C API の使用: その他の話題

* 拡張の型の定義: チュートリアル

* 拡張の型の定義: 雑多なトピック

* C および C++ 拡張のビルド

* Windows 上での C および C++ 拡張モジュールのビルド


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

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

* 他のアプリケーションへの Python の埋め込み
