基本的な事柄についてはこの記事に丁寧に書かれている
簡単にまとめると
sys.path
に登録されているsys.path
には以下のパスが登録されるPYTHONPATH
という環境変数に設定したディレクトリのパス( :
で連結する)__init__.py
は Python3.3 以降では必須ではなくなった(PEP420によるもの 参考 )上記記事を同じく参照しながら記載する。最もよく見るパターンとして以下の構成が考えられる。これは正しく機能するとのこと。
/root
- main.py
- /module/
- hello.py
from module.hello import hello
hello()
def hello():
print("Hello World!")
$ python main.py
Hello World!
別モジュールは、起動スクリプトより下の階層に配置することが推奨されている。
https://docs.python.org/ja/3.9/tutorial/modules.html#
よくやらかすパターンが、以下のようにメインスクリプト用ディレクトリとモジュール用ディレクトリを分けてしまうケース。これだと sys.path
に読み込みたいモジュールのディレクトリが登録されないので、 from ..xxx.yyy import xxx
みたいな記述で対処しなければならない。
が、これで結構ハマることがあるし、Pythonらしくない書き方ではないかと思う。
/root
- main/
- main.py
- /module/
- hello.py