Google App Engine でモジュールを動的にインポートする方法

Google App Engine(以下 GAE)でモジュールを動的にインポートするには、__import__関数を使えばいい。

# 動的にモジュールをインポートする
def dynamic_import(name):
    mod = __import__(name, globals(), locals(), [], -1)
    components = name.split('.')
    for comp in components[1:]:
        mod = getattr(mod, comp)
    return mod

# subscription.config モジュールをインポート
module = dynamic_import("subscription.config")

# create 関数を取得
create = getattr(module, "create")

# create 関数を使ってオブジェクト生成
obj = create()

動的にインポートする方法としては他に imp があるけど、こちらは GAE がサポートしていないため、使うと例外が発生する。

まぁ、モジュールを動的にインポートする場面なんて滅多に無いだろうけど、GAE 用に作った RSS フィードアグリゲーターで使うので、メモしておく。