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

前章では、 Python を拡張する方法、すなわち C 関数のライブラリを Python に結びつけて機能を拡張する方法について述べました。 同じようなことを別の方法でも実行できます: それは、自分の C/C++ アプリケーションに Python を埋め込んで機能を強化する、というものです。 埋め込みを行うことで、アプリケーションの何らかの機能を C や C++ の代わりに Python で実装できるようになります。 埋め込みは多くの用途で利用できます; ユーザが Python でスクリプトを書き、 アプリケーションを自分好みに仕立てられるようにする、というのが その一例です。プログラマが、特定の機能を Python でより楽に書ける場合に 自分自身のために埋め込みを行うこともできます。

Python の埋め込みは Python の拡張と似ていますが、全く同じという わけではありません。その違いは、Python を拡張した場合には アプリケーションのメインプログラムは依然として Python インタプリタ である一方、 Python を組み込みんだ場合には、メインプログラムには Python が関係しない -- その代わりに、アプリケーションのある一部分 が時折 Python インタプリタを呼び出して何らかの Python コードを 実行させる -- かもしれない、ということです。

従って、 Python の埋め込みを行う場合、自作のメインプログラムを 提供しなければなりません。メインプログラムがやらなければならないこと の一つに、 Python インタプリタの初期化があります。とにかく少なくとも 関数 `Py_Initialize()` (Mac OS なら`PyMac_Initialize()`) を呼び出さねばなりません。 オプションとして、Python 側にコマンドライン引数を渡すために関数呼び出し を行います。その後、アプリケーションのどこでもインタプリタを 呼び出せるようになります。

インタプリタを呼び出すには、異なるいくつかの方法があります: Python 文が入った文字列を`PyRun_SimpleString()` に渡す、 stdio ファイルポインタとファイル名 (これはエラーメッセージ内で コードを識別するためだけのものです) を `PyRun_SimpleFile()` に渡す、といった具合です。 これまでの各章で説明した低水準の操作を呼び出して、Python オブジェクトを 構築したり使用したりもできます。

Python の埋め込みを行っている簡単なデモは、ソース配布物の Demo/embed/ ディレクトリにあります。

参考資料:

Python/C API リファレンスマニュアル
  Python C インタフェースの詳細はこのマニュアルに書かれています。 必要な情報の大部分はここにあるはずです。