結論
init.pyとは
- Pythonパッケージをimportしたときに、初期設定として実行されるコード類のこと1
- 省略可能だが、書くのが一般的
__all__とは
-
__init__.py内に書く -
from package import *と書かれたときに、importできるモジュール名のリストのこと2 - 書き方は以下のとおり
__all__ = [ "module_name_a", "module_name_b" ]
これがないとどうなる?
init.py
- Python3.2までは、
__init__.pyが存在しないと、複数の*.pyファイルをパッケージとして扱わず、個別のスクリプトとして扱うことになっていた -
__init__.pyを保存したディレクトリは、Pythonはパッケージとみなすので、以下の書き方で外部ファイルからimportできるimport package_name - package_name =
__init__.pyを保存したディレクトリ名となる - 現在は省略可能だが、初期化処理を書けることから書くのが一般的
__all__
-
from package_name import *で、__init__.pyで明示的に定義された名前だけが読み込まれる - 使用時に直接importが想定されていないもの、セキュリティ上読み込ませたくないモジュールなども全てimportされてしまう