1.4 Python の埋め込み

Python インタプリタの埋め込みを行う人 (いわば拡張モジュールの 書き手の対極) が気にかけなければならない重要なタスクは、 Python インタプリタの初期化処理 (initialization)、そしておそらくは 終了処理 (finalization) です。インタプリタのほとんどの機能は、 インタプリタの起動後しか使えません。

基本的な初期化処理を行う関数は Py_Initialize() です。 この関数はロード済みのモジュールからなるテーブルを作成し、 土台となるモジュール __builtin__, __main__, sys, および exceptions を作成します。 また、モジュール検索パス (sys.path) の初期化も行います。

Py_Initialize() の中では、 ``スクリプトへの引数リスト'' (script argument list, sys.argv のこと) を設定しません。 この変数が後に実行される Python コード中で必要なら、 Py_Initialize() に続いて PySys_SetArgv(argc, argv) を呼び出して明示的に設定しなければなりません。

ほとんどのシステムでは (特に Unix と Windows は、詳細がわずかに 異なりはしますが)、 Py_Initialize() は 標準の Python インタプリタ実行形式の場所に対する推定結果に基づいて、 Python のライブラリが Python インタプリタ実行形式からの相対パスで 見つかるという仮定の下にモジュール検索パスを計算します。 とりわけこの検索では、シェルコマンド検索パス (環境変数 PATH) 上に見つかった python という名前の実行ファイルの置かれている ディレクトリの親ディレクトリからの相対で、 lib/python2.4 という名前のディレクトリを探します。

例えば、 Python 実行形式が /usr/local/bin/python で見つかった とすると、Py_Initialize() はライブラリが /usr/local/lib/python2.4 にあるものと仮定します。 (実際には、このパスは ``フォールバック (fallback)'' のライブラリ 位置でもあり、pythonPATH 上にない場合に使われます。) ユーザは PYTHONHOME を設定することでこの動作をオーバライド したり、PYTHONPATH を設定して追加のディレクトリを 標準モジュール検索パスの前に挿入したりできます。

埋め込みを行うアプリケーションでは、 Py_Initialize() を呼び出す 前に Py_SetProgramName(file) を呼び出すことで、上記の検索を操作できます。 この埋め込みアプリケーションでの設定は依然として PYTHONHOME でオーバライドでき、標準のモジュール検索パスの前には以前として PYTHONPATH が挿入されるので注意してください。 アプリケーションでモジュール検索パスを完全に制御したいのなら、 独自に Py_GetPath(), Py_GetPrefix(), Py_GetExecPrefix(), および Py_GetProgramFullPath() の実装を提供しなければなりません (これらは全て Modules/getpath.c で定義されています)。

たまに、 Python を ``初期化しない'' ようにしたいことがあります。 例えば、あるアプリケーションでは実行を最初からやりなおし (start over) させる (Py_Initialize() をもう一度呼び出させる) ように したいかもしれません。あるいは、アプリケーションが Python を一旦 使い終えて、Python が確保した全てのメモリを解放できるようにしたいかも しれません。Py_Finalize() を使うと、こうした処理を 実現できます。また、関数 Py_IsInitialized() は、Python が現在初期化済みの状態にある場合に真を返します。 これらの関数についてのさらなる情報は、後の章で説明します。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。