wsadminでImportError レアもの?
すごい面倒臭いエラーに出くわした。
ImportErrorがなかなか取り除けなかった。
凡ミスもあった。
__init__.pyをミペルミスしてて、
__ini__.pyになってた。
これはいい。
今回ドハマりしたのは、もっと気づきにくい話。
ImportErrorなんだから、探索パスを気にした。
sys.pathを出力。
あるある、ちゃんとある。
でも見つからない。
__init__.pyは修正済み。
wsadmin.shを叩くときには、-javaoption "-Dwsadmin.script.libraries.packages=/どこそこ:/あそこ:/こっち" -f わたしの.py を渡している。
それがsys.pathにも反映されている。
実際のフォルダは、こんなかんじ。
a/b/c.py
a/b/d/e.py
a/f/g.py
wsadmin.shに-fで渡してるのがc.pyな感じ。
e.pyはg.pyに書いてるクラスをインポートしている。
from a.f.g import Hoge, Foo
どんなに頑張っても、eモジュールが見つからない。
e.pyの例のimportは、これから先に使うつもりで、まだ使っていなくて、消してみたら、e.pyが見つかるようになった。
なんじゃそりゃ!!
もっかい構成を詳細に書いておく。
言葉で書くと分かりにくい。。。
真の原因は自分には分からないが、
クラスをインポートしてるモジュールは、見つからなくなる、って解釈になる。ざっくりすぎだが、症状としてはそうなる。
こんなことで半日潰れた。
解決の糸口を見つけただけ良かったと思おう。
まだ終わってない。自分が考えた設計の障害になっている。きっと乗り越えてやるよ。