ModuleNotFoundError: No module named ‘my_module’

はじめに

Python の import は何度やっても慣れないので、パターン別にコピペすることにしました。

パターン1

ディレクトリ構成

vagrant@host:~/import-test$ tree
.
└── my_module
    ├── main_ng.py
    ├── main_ok.py
    └── sub.py

1 directory, 3 files

呼び出し元ソース

vagrant@host:~/import-test$ cat my_module/main_ng.py 
from my_module.sub import InvalidArgumentsError

if __name__ == "__main__":
    pass

呼ばれる方のソース

vagrant@host:~/import-test$ cat my_module/sub.py 
class InvalidArgumentsError(Exception):
    pass

この書き方では実行できないようです。

vagrant@host:~/import-test$ python my_module/main_ng.py 
Traceback (most recent call last):
  File "/home/vagrant/import-test/my_module/main_ng.py", line 1, in <module>
    from my_module.sub import InvalidArgumentsError
ModuleNotFoundError: No module named 'my_module'

この場合、main_ng.py(のある場所)から見て my_module.sub というのは見えないので、単に sub と書かないといけないようです。

vagrant@host:~/import-test$ cat my_module/main_ok.py 
from sub import InvalidArgumentsError

if __name__ == "__main__":
    pass
vagrant@host:~/import-test$ python my_module/main_ok.py 

他にもいろんなパターンがありそうなので、気づいたらここに追記していきたいと思います。

タイトルとURLをコピーしました