import 文を使わずにモジュールを作成する
import 文を使わずに、任意の Python スクリプトをモジュールとして読み込む方法。こうすると、拡張子が「.py」じゃなくても読み込み可能。
import os file = 'foo.py' name = 'foo' module = type(os)(name) # (*1) module.__file__ = file execfile(file, module.__dict__, module.__dict__) # (*2) print module #=> <module 'foo' from 'foo.py'>
ポイントとなるのは次のところ。
- (*1) 「type(os)(name)」のところは、「type(os)」で module 型を取り出している。その型を関数のように呼び出すと、module 型のオブジェクトが作成される。
- (*2) 「execfile()」でファイルを読み込むときに、グローバル変数用辞書・ローカル変数用辞書として、module オブジェクトの内部辞書を渡している。
なるほどねー。