階層構造を持ったパッケージの例

初回公開:2019/01/20
最終更新:未

パッケージの階層構造の実装の具体例

パッケージtop_packageの下にsub_packageを階層的に配置してmainモジュールから呼び出す例を示す。

ファイルの階層構造
├─main.py
└─top_package
    ├─__init__.py
    ├─top_module1.py
    ├─top_module2.py
    └─sub_package
       ├─__init__.py
       ├─sub_module1.py
       └─sub_module2.py

パッケージtop_packageには__init__.pyとtop_module1.pyとtop_module2.pyの3つのモジュールが存在する。

top_package/__init__.py

s = u"top_package.__init__.s"

def func():
    print u"top_package.__init__.funcを実行しました。"

top_package/top_module1.py

s = u"top_package.top_module1.s"

def func():
    print u"top_package.top_module1.funcを実行しました。"

top_package/top_module2.py

s = u"top_package.top_module2.s"

def func():
    print u"top_package.top_module2.funcを実行しました。"

更に、パッケージtop_packageの下のサブパッケージsub_packageには__init__.pyとsub_module1.pyとsub_module2.pyの3つのモジュールが存在する。

top_package/sub_package/__init__.py

s = u"sub_package.__init__.s"

def func():
    print u"sub_package.__init__.funcを実行しました。"

top_package/sub_package/sub_module1.py

s = u"sub_package.sub_module1.s"

def func():
    print u"sub_package.sub_module1.funcを実行しました。"

top_package/sub_package/sub_module2.py

s = u"sub_package.sub_module2.s"

def func():
    print u"sub_package.sub_module2.funcを実行しました。"

これ等のパッケージ内のモジュールに定義された関数funcや変数sを呼び出すと

main.py

import top_package.top_module1,top_package.top_module2

top_package.func()
top_package.top_module1.func()
top_package.top_module2.func()
print top_package.s
print top_package.top_module1.s
print top_package.top_module2.s

import top_package.sub_package.sub_module1,top_package.sub_package.sub_module2

top_package.sub_package.func()
top_package.sub_package.sub_module1.func()
top_package.sub_package.sub_module2.func()
print top_package.sub_package.s
print top_package.sub_package.sub_module1.s
print top_package.sub_package.sub_module2.s

実行結果

top_package.__init__.funcを実行しました。
top_package.top_module1.funcを実行しました。
top_package.top_module2.funcを実行しました。
top_package.__init__.s
top_package.top_module1.s
top_package.top_module2.s
sub_package.__init__.funcを実行しました
sub_package.sub_module1.funcを実行しました。
sub_package.sub_module2.funcを実行しました。
sub_package.__init__.s
sub_package.sub_module1.s
sub_package.sub_module2.s

importのパスの指定のしかた

上記の例は絶対インポートと呼ばれているようで、
importのパスの指定のしかたにはいろいろとあって

同じパッケージ内のモジュールどうしの呼び出しには相対インポートが使えるようで

ページのトップへ戻る