夢に向かって、好奇心を持ち、疑問を持ち続ける。それが努力。

趣味でロボット職人を目指す自称AI研究者のメモです。

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


ぱちぱちぱち!
同じ様に詰まる人がいたら参考になればと思います〜!

ではまた!