はじめに
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
他にもいろんなパターンがありそうなので、気づいたらここに追記していきたいと思います。