あるモジュールが上位モジュール(パッケージ)に含まれていることがあり、さらにパッケージ自体も上位パッケージがありえる。このように階層構造になっているモジュールの場合、import
と関数呼び出しは.
で名前を区切って、
import 親パッケージ.子パッケージ.モジュール名
親パッケージ.子パッケージ.モジュール名.関数名(引数)
パッケージの階層構造を自作する最も単純なやり方は、ディレクトリの階層をそのまま利用する方法。モジュール検索パスのディレクトリ配下に「親ディレクトリ/子ディレクトリ/モジュール.py」のように作れば、ディレクトリ名がパッケージ名となるので、下記のようにimport
、実行できる。
import 親ディレクトリ.子ディレクトリ.モジュール名
親ディレクトリ.子ディレクトリ.モジュール名.関数名(引数)
Python3.3からは、上のやり方は名前空間パッケージとして認識されるようになり、それまでパッケージのディレクトリに置く必要があった__init__.py
というファイルが不要になった(PEP 420)。
例えば、下記プログラムと同じディレクトリにpackage1/という空のディレクトリを作っただけでも、
import package1
print(package1) # <module 'package1' (namespace)>
ちゃんと認識されるので、その配下に子パッケージやモジュールを作ればよい。