patching stdlib module dynamically (os.path alternative の続き)

話としては これ の完全な続き。

単独のスクリプトで これを使うぶんには、「import fwspath」は全然苦じゃないしいいんだけど、fwspath.py を「抱え込んだパッケージ」を作っているとすると、なかなかに不愉快なことも起こる。

要するにフラットなパッケージではなく若干深い階層を持ったパッケージを作っているとするなら、工夫しないとこんなやらしいことになる:

1 from ...fwspath import normpath, splitext, dirname

さらにややこしいことになりうるのが、開発しているパッケージが、「2つのパッケージ化抽出候補」から成る場合。つまり「この部分は更に独立させてパッケージ化したい」の「途中」な場合、その独立させたい側では上のような依存を埋め込むわけにはいかない。

まぁこんな乱暴な魔法でいいよね:

典型的にはパッケージのトップレベルの __init__.py 内で
1 import sys
2 from . import fwspath
3 
4 
5 sys.modules["os.path"] = sys.modules[fwspath.__name__]

こうしておくことで、あてにしたい場所では「os.path を使っているつもり」で実は fwspath を使っている、と出来る。なので「独立させたい側」からは見かけ上 fwspath 依存が消える。