ネストしたモジュールをimportする関数
ビルトイン関数__import__ は 文字列を引数にとり、import文と同様の事をする関数です。
プログラム実行中に動的にモジュールをimportするときなどに使えるのですが、
__import__はimportと全く同じではありません。ネストしたモジュールをimport出来ないのです。
mod = __import__("level1.level2.spam") print(mod) # <module 'level1' from 'D:\Owner\temp\level1\__init__.py'> # level1.level2.spamではない!!
Python 2.6のヘルプに解決法がありました。
テストに使ったファイル・ディレクトリ構造 │ import_test.py │ └─level1 │ __init__.py │ └─level2 spam.py __init__.py
#Python 2.6ヘルプを参考に #encoding:shift-jis from __future__ import with_statement, division, print_function mod = __import__("level1.level2.spam") print(mod) # <module 'level1' from 'D:\Owner\temp\level1\__init__.py'> # level1.level2.spamではない!! def nested_import(name): #ネストしたモジュールをimport出来る関数 import sys __import__(name) return sys.modules[name] mod = nested_import("level1.level2.spam") print(mod) # <module 'level1.level2.spam' from 'D:\Owner\temp\level1\level2\spam.pyc'> # ok ! mod = nested_import("level1") print(mod) # <module 'level1' from 'D:\Owner\temp\level1\__init__.py'> # もちろん、ネストしていなくてもimport出来る