私は(少なくとも今のところは)「モジュールダックタイピング」という名前の新しい手法を試し始めたところです。
例:
メインモジュール
import somepackage.req ## module required by all others
import abc
import Xyz
モジュールabc
__all__=[]
def getBus():
""" Locates the `req` for this application """
for mod_name in sys.modules:
if mod_name.find("req") > 0:
return sys.modules[mod_name].__dict__["Bus"]
raise RuntimeError("cannot find `req` module")
Bus=getBus()
モジュールabc
では、明示的にする必要はありませんimport req
。パッケージ階層のどこにあってもかまいません。もちろん、これにはある程度の規律が必要です...
この手法を使用すると、階層内でパッケージを簡単に再配置できます。
私を待っている落とし穴はありますか?例:Python3Kへの移行
更新:さらにテストを行った後、パッケージの依存関係をに直接挿入することに戻りましたsys.path
。