Pythonの上位モジュールがimportできない!→コマンドをモジュール実行!
皆様お元気でしょうか.
ご無沙汰してしまいましたが,最近コード書いていて詰まった話をメモしておきます.(初歩的なところですがw)
今回は,ずばり”モジュール化”!
pythonでコードを書いていて,
code/moduleA/testA.py
code/moduleB/testB.py
で,testA.pyからtestBのモジュールをImportしたいときありますよね.
特にtestA.pyの単体テストを想定してます.
testA.pyに以下のように書くとします.
from module B import testB
もちろん,moduleB/__init__.pyはありますが,
'no module named moduleB'
でエラーになります..
うーん??相対パスだからこれかなぁ?
from ..module B import testB
と試しても,'ImportError: attempted relative import with no known parent package'というエラーで怒られます..
ちなみに,
testA.pyを code/test.py のようにcode直下に配置すれば,
from module B import testB
で正常に動きます.でも単体テストで移動したら意味ない!
そんなときは!ずばり!モジュール実行!!です!!
pythonコマンドの-mオプション.
python -m moduleA.testA
のようにコマンドラインに書いてtestA.pyを実行(.pyは不要)すると,testA.py内で以下のようなモジュール呼び出しがあっても正常に動きます.
from module B import testB
ぱちぱちぱち!
同じ様に詰まる人がいたら参考になればと思います〜!
ではまた!