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 オブジェクトの内部辞書を渡している。

なるほどねー。