階層構造を持ったパッケージの例
初回公開: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
のパスの指定のしかたにはいろいろとあって
同じパッケージ内のモジュールどうしの呼び出しには相対インポートが使えるようで
-
Python: 明示的な相対インポートの使い方 - CUBE SUGAR CONTAINER
Python のインポートには、次のように3つの種類がある。
暗黙の相対インポート
明示的な相対インポート
絶対インポート
このうち、暗黙の相対インポートについては Python 3 で廃止されたので使ってはいけない。 - モジュール — phpy 0.1 documentation