モジュールのインポート
**********************

PyObject* PyImport_ImportModule(const char *name)
    *Return value: New reference.*

   この関数は下で述べる "PyImport_ImportModuleEx()" を単純化したインタ
   フェースで、 *globals* および *locals* 引数を *NULL* のままにし、
   *level* を 0 にしたものです。 *name* 引数にドットが含まれる場合 (あ
   るパッケージのサブモジュールを指定している場合)、 *fromlist* 引数が
   リスト "['*']" に追加され、戻り値がモジュールを含むトップレベルパッ
   ケージではなく名前つきモジュール (named module) になるようにします
   。 (残念ながらこのやり方には、 *name* が実際にはサブモジュールでな
   くサブパッケージを指定している場合、パッケージの "__all__" 変数に指
   定されているサブモジュールがロードされてしまうという副作用がありま
   す。) import されたモジュールへの新たな参照を返します。失敗した場合
   には例外をセットし、 *NULL* を返します。 Python 2.4 より前のバージ
   ョンでは、失敗した場合でもモジュールは生成されていることがあります
   --- "sys.modules" を使って調べてください。 Python 2.4 以降では、
   import に失敗したモジュールは "sys.modules" に残りません。

   バージョン 2.4 で変更: import に失敗した場合、不完全なモジュールを
   除去するようになりました。

   バージョン 2.6 で変更: 常に、絶対 import を使うようになりました。

PyObject* PyImport_ImportModuleNoBlock(const char *name)

   このバージョンの "PyImport_ImportModule()" はブロックしません。関数
   を実行するために他のモジュールをインポートするC関数から使われること
   を意図しています。インポート処理は他のスレッドがインポートロックを
   持っている場合はブロックします。この関数はブロックしません。まず
   sys.modules からモジュールのフェッチを試み、失敗したら、ロックが取
   られていなければ "PyImport_ImportModule()" を実行します。ロックが取
   られていた場合は "ImportError" を発生させます。

   バージョン 2.6 で追加.

PyObject* PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
    *Return value: New reference.*

   モジュールを import します。モジュールの import については組み込み
   の Python 関数 "__import__()" を読むとよく分かります。というのも、
   標準の "__import__()"  はこの関数を直接呼び出しているからです。

   戻り値は import されたモジュールかトップレベルパッケージへの新たな
   参照になります。失敗した場合には例外をセットし、 *NULL* を返します
   (Python 2.4 よりも前のバージョンでは、モジュールは生成されている場
   合があります) "__import__()" と同じく、パッケージに対してサブモジュ
   ールを要求した場合の戻り値は通常、空でない *fromlist* を指定しない
   限りトップレベルパッケージになります。

   バージョン 2.4 で変更: import に失敗した場合、不完全なモジュールを
   除去するようになりました。

   バージョン 2.6 で変更: この関数は "PyImport_ImportModuleLevel()" の
   エイリアスです。 level には相対インポートを意味する "-1" が渡されま
   す。

PyObject* PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
    *Return value: New reference.*

   モジュールを import します。モジュールの import については組み込み
   の Python 関数 "__import__()" を読むとよく分かります。というのも、
   標準の "__import__()"  はこの関数を直接呼び出しているからです。

   戻り値は、インポートされたモジュールかトップレベルパッケージへの新
   しい参照か、失敗した場合は例外を設定して *NULL* を返します。
   "__import__()" と同じように、パッケージのサブモジュールが要求された
   ときは、空でない *fromlist* を渡された時以外は、トップレベルのパッ
   ケージを返します。

   バージョン 2.5 で追加.

PyObject* PyImport_Import(PyObject *name)
    *Return value: New reference.*

   現在の "import フック関数" を呼び出すための高水準のインタフェースで
   す。この関数は現在のグローバル変数辞書内の "__builtins__" から
   "__import__()" 関数を呼び出します。すなわち、現在の環境にインストー
   ルされている import フック、例えば "rexec" や "ihooks" を使って
   import を行います。

   バージョン 2.6 で変更: 常に、絶対 import を使うようになりました。

PyObject* PyImport_ReloadModule(PyObject *m)
    *Return value: New reference.*

   モジュールを再ロード (reload) します。モジュールの再ロードについて
   は組み込みの Python 関数 "reload()" を読むとよく分かります。という
   のも、標準の "reload()" はこの関数を直接呼び出しているからです。戻
   り値は再ロードしたモジュールかトップレベルパッケージへの新たな参照
   になります。失敗した場合には例外をセットし、 *NULL* を返します (そ
   の場合でも、モジュールは生成されている場合があります)

PyObject* PyImport_AddModule(const char *name)
    *Return value: Borrowed reference.*

   モジュール名に対応するモジュールオブジェクトを返します。*name* 引数
   は "package.module" の形式でもかまいません。まずモジュール辞書に該
   当するモジュールがあるかどうか調べ、なければ新たなモジュールを生成
   してモジュール辞書に挿入します。失敗した場合には例外をセットして
   *NULL* を返します。

   注釈: この関数はモジュールの import やロードを行いません; モジュ
     ールが まだロードされていなければ、空のモジュールオブジェクトを得
     ること になります。 "PyImport_ImportModule()" やその別形式を使っ
     てモジュ ールを import してください。ドット名表記で指定した
     *name* が存在 しない場合、パッケージ構造は作成されません。

PyObject* PyImport_ExecCodeModule(char *name, PyObject *co)
    *Return value: New reference.*

   モジュール名 ("package.module" 形式でもかまいません) および Python
   のバイトコードファイルや組み込み関数 "compile()" で得られたコードオ
   ブジェクトを元にモジュールをロードします。モジュールオブジェクトへ
   の新たな参照を返します。失敗した場合には例外をセットし、 *NULL* を
   返します。Python 2.4 以前では、失敗した場合でもモジュールは生成され
   ていることがありました。 Python 2.4 以降では、たとえ
   "PyImport_ExecCodeModule()" の処理に入った時に *name* が
   "sys.modules" に入っていたとしても、 import に失敗したモジュールは
   "sys.modules" に残りません。初期化の不完全なモジュールを
   "sys.modules" に残すのは危険であり、そのようなモジュールを import
   するコードにとっては、モジュールの状態がわからない (モジュール作者
   の意図から外れた壊れた状態かもしれない) からです。

   モジュールの "__file__" 属性が、コードオブジェクトの "co_filename"
   に設定されます。

   この関数は、すでに import されているモジュールの場合には再ロードを
   行います。意図的にモジュールの再ロードを行う方法は
   "PyImport_ReloadModule()" を参照してください。

   *name* が "package.module" 形式のドット名表記であった場合、まだ作成
   されていないパッケージ構造はその作成されないままになります。

   バージョン 2.4 で変更: エラーが発生した場合に *name* を
   "sys.modules" から除去するようになりました。

PyObject* PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
    *Return value: New reference.*

   "PyImport_ExecCodeModule()" と似ていますが、*pathname* が "NULL" で
   ない場合にモジュールオブジェクトの "__file__" 属性に *pathname* が
   設定される点が異なります。

long PyImport_GetMagicNumber()

   Python バイトコードファイル (いわゆる ".pyc" および ".pyo" ファイル
   ) のマジックナンバを返します。マジックナンバはバイトコードファイル
   の先頭 4 バイトにリトルエンディアン整列で配置されています。

PyObject* PyImport_GetModuleDict()
    *Return value: Borrowed reference.*

   モジュール管理のための辞書 (いわゆる "sys.modules")を返します。この
   辞書はインタプリタごとに一つだけある変数なので注意してください。

PyObject* PyImport_GetImporter(PyObject *path)

   "sys.path"/"pkg.__path__" の要素 *path* の、 importer オブジェクト
   を返します。可能なら、 "sys.path_importer_cache" からフェッチします
   。まだキャッシュされていない場合、そのパスを扱える hook が見つかる
   まで "sys.path_hooks" を巡回します。 hook が見つからない場合、
   "None" を返します。この場合、呼び出し元はビルトインのインポート機構
   にフォールバックします。結果は "sys.path_importer_cache" にキャッシ
   ュされます。 importer オブジェクトへの新しい参照を返します。

   バージョン 2.6 で追加.

void _PyImport_Init()

   import 機構を初期化します。内部使用だけのための関数です。

void PyImport_Cleanup()

   モジュールテーブルを空にします。内部使用だけのための関数です。

void _PyImport_Fini()

   import 機構を終了処理します。内部使用だけのための関数です。

PyObject* _PyImport_FindExtension(char *, char *)

   内部使用だけのための関数です。

PyObject* _PyImport_FixupExtension(char *, char *)

   内部使用だけのための関数です。

int PyImport_ImportFrozenModule(char *name)

   *name* という名前のフリーズ (freeze) されたモジュールをロードします
   。成功すると "1" を、モジュールが見つからなかった場合には "0" を、
   初期化が失敗した場合には例外をセットして "-1" を返します。ロードに
   成功したモジュールにアクセスするには "PyImport_ImportModule()" を使
   ってください。 (Note この関数名はいささか誤称めいています --- この
   関数はすでに import 済みのモジュールをリロードしてしまいます。)

struct _frozen

   **freeze** ユーティリティが生成するようなフリーズ化モジュールデスク
   リプタの構造体型定義です。 (Python ソース配布物の "Tools/freeze/"
   を参照してください) この構造体の定義は "Include/import.h" にあり、
   以下のようになっています:

      struct _frozen {
          char *name;
          unsigned char *code;
          int size;
      };

struct _frozen* PyImport_FrozenModules

   このポインタは "struct _frozen" のレコードからなり、終端の要素のメ
   ンバが *NULL* かゼロになっているような配列を指すよう初期化されます
   。フリーズされたモジュールを import するとき、このテーブルを検索し
   ます。サードパーティ製のコードからこのポインタに仕掛けを講じて、動
   的に生成されたフリーズ化モジュールの集合を提供するようにできます。

int PyImport_AppendInittab(const char *name, void (*initfunc)(void))

   既存の組み込みモジュールテーブルに単一のモジュールを追加します。こ
   の関数は利便性を目的とした "PyImport_ExtendInittab()" のラッパ関数
   で、テーブルが拡張できないときには "-1" を返します。新たなモジュー
   ルは *name* で import でき、最初に import を試みた際に呼び出される
   関数として *initfunc* を使います。 "Py_Initialize()" よりも前に呼び
   出さなければなりません。

struct _inittab

   組み込みモジュールリスト内の一つのエントリを記述している構造体です
   。リスト内の各構造体には、インタプリタ内に組み込まれているモジュー
   ルの名前と初期化関数が指定されています。 Python を埋め込むようなプ
   ログラムは、この構造体の配列と "PyImport_ExtendInittab()" を組み合
   わせて、追加の組み込みモジュールを提供できます。構造体は
   "Include/import.h" で以下のように定義されています:

      struct _inittab {
          char *name;
          void (*initfunc)(void);
      };

int PyImport_ExtendInittab(struct _inittab *newtab)

   組み込みモジュールのテーブルに一群のモジュールを追加します。配列
   *newtab* は "name" フィールドが *NULL* になっているセンチネル
   (sentinel) エントリで終端されていなければなりません; センチネル値を
   与えられなかった場合にはメモリ違反になるかもしれません。成功すると
   "0" を、内部テーブルを拡張するのに十分なメモリを確保できなかった場
   合には "-1" を返します。操作が失敗した場合、モジュールは一切内部テ
   ーブルに追加されません。 "Py_Initialize()" よりも前に呼び出さなけれ
   ばなりません。
