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.5 という名前のディレクトリを探します。
例えば、 Python 実行形式が /usr/local/bin/python で見つかった とすると、Py_Initialize() はライブラリが /usr/local/lib/python2.5 にあるものと仮定します。 (実際には、このパスは ``フォールバック (fallback)'' のライブラリ 位置でもあり、python が PATH 上にない場合に使われます。) ユーザは 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 が現在初期化済みの状態にある場合に真を返します。 これらの関数についてのさらなる情報は、後の章で説明します。 Py_Finalize がPythonインタプリタに確保された全てのメモリを 開放するわけではないことに注意してください。例えば、格調モジュールに よって確保されたメモリは、現在のところ開放する事ができません。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。