パッケージ


パッケージ

あるモジュールが上位モジュール(パッケージ)に含まれていることがあり、さらにパッケージ自体も上位パッケージがありえる。このように階層構造になっているモジュールの場合、importと関数呼び出しは.で名前を区切って、

import 親パッケージ.子パッケージ.モジュール名
親パッケージ.子パッケージ.モジュール名.関数名(引数)

パッケージの自作

パッケージの階層構造を自作する最も単純なやり方は、ディレクトリの階層をそのまま利用する方法。モジュール検索パスのディレクトリ配下に「親ディレクトリ/子ディレクトリ/モジュール.py」のように作れば、ディレクトリ名がパッケージ名となるので、下記のようにimport、実行できる。

import 親ディレクトリ.子ディレクトリ.モジュール名
親ディレクトリ.子ディレクトリ.モジュール名.関数名(引数)

__init__.pyが不要に

Python3.3からは、上のやり方は名前空間パッケージとして認識されるようになり、それまでパッケージのディレクトリに置く必要があった__init__.pyというファイルが不要になった(PEP 420)。

例えば、下記プログラムと同じディレクトリにpackage1/という空のディレクトリを作っただけでも、

import package1
print(package1) # <module 'package1' (namespace)>

ちゃんと認識されるので、その配下に子パッケージやモジュールを作ればよい。