[python] __init__.py 下にあるモジュールをすべてロードする(改

以前にも同じネタを書いたのですが、前回より良いやり方があったのでメモをば。

[python] __init__.pyと同じ階層にある.pyをまとめてimportする

こちらが前回の記事。

前回は importlib を使用したやり方にしましたが、
・Maya2013とかだとデフォルトだとimportlibは入っていない。
・イマイチ見た目よろしくない
・reload(mod) したときに正しく 階層以下のモジュールもリロードできない
というのがあったので、他のやり方を探していました。

今回の新しい書き方は、 exec() と sys.modules の合わせ技です。
以下ソース。

exec関数を使用して、 from XXX import * のインポート文を実行 というのがメインなのですが、
これだけだとリロードをしてくれなくなります。
sys.modulesには、 .py で読み込んでいるモジュールが入っています。
すでに入っている場合は、
無理矢理 sys.modules からリロードしたいモジュールをpopして、再度 from XXX import * して
reload(XXX)するのと同じ事をしています。

たぶん、前回よりはシンプルだし今のところリロードも出来ているのでOK…なはず!

コメントを残す

メールアドレスが公開されることはありません。


*