モジュールのインポート¶
-
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 機構を終了処理します。内部使用だけのための関数です。
-
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()よりも前に呼び出さなければなりません。
