とほほのPython入門 - パッケージとモジュール

トップ > Python入門 > パッケージとモジュール

目次

モジュール(module)

ひとつのスクリプトファイルはモジュールとして扱うことができます。モジュールは import文で読み込みます。読み込んだモジュールのクラス、関数、変数は、「モジュール名.識別子」で参照することができます。

mymod.py
def myfunc():
    print("Hello!")
mytest.py
import mymod

mymod.myfunc()                      #=> Hello!

モジュールの冒頭には、"""...""" で ドキュメントストリング を記述することができます。

Python
# coding: utf-8
"""A sample module"""
(略)

パッケージ(package)

複数のモジュールをまとめてパッケージとして扱うことができます。パッケージは、__init__.py という名前のファイルを持つフォルダ、モジュールは .py ファイルです。__init__.py にはパッケージの初期化処理を記述します。なければ空でかまいません。下記の例では、mypack1パッケージの中に mypack2パッケージがあり、mypack2パッケージの中に mymod.pyモジュールが配置されています。

フォルダ構成
フォルダmypack1/
  ファイル__init__.py
  フォルダmypack2/
    ファイル__init__.py
    フォルダmymod.py

インポート(import)

パッケージの中からモジュールや識別子(クラス、関数、変数...)をインポートするには下記の様にします。

Python
# import [パッケージ.]モジュール
import mypack1.mypack2.mymod
mypack1.mypack2.mymod.myfunc()

# from パッケージ import モジュール
from mypack1.mypack2 import mymod
mymod.myfunc()

# from パッケージ import *
from mypack1.mypack2 import *                # __all__の設定が必要
mymod.myfunc()

# from [パッケージ.]モジュール import 識別子
from mypack1.mypack2.mymod import myfunc
myfunc()

# from [パッケージ.]モジュール import *
from mypack1.mypack2.mymod import *
myfunc()

上記の例で「from パッケージ import *」の形式を用いるには、mypack2 パッケージの __init__.py ファイルに読み込み対象のモジュールリストを __all__ に定義しておく必要があります。

__init__.py
__all__ = ["mymod"]

読み込むモジュールや識別子を複数記述することもできます。

Python
import mypack1.mypack2.mymod1, mypack1.mypack2.mymod2
from mypack1.mypack2 import mymod, mymod2
from mypack1.mypack2 import (mymod, mymod2)
from mypack1.mypack2.mymod import myfunc1, myfunc2
from mypack1.mypack2.mymod import (myfunc1, myfunc2)

読み込んだモジュール名や識別子に別名をつけることができます。

Python
import mypack1.mypack2.mymod as mymod1
mymod1.myfunc()

from mypack1.mypack2 import mymod as mymod2
mymod2.myfunc()

from mypack1.mypack2.mymod import myfunc as myfunc1
myfunc1()

from には、. や .. を用いて、パッケージを相対的に指示することができます。

Python
from . import mymod              # このパッケージから mymodモジュールをインポートする
from .. import mymod             # ひとつ上の階層のパッケージから mymodモジュールをインポートする
from ... import mymod            # ふたつ上の階層のパッケージから mymodモジュールをインポートする
from ...mypack4 import mymod     # ふたつ上の階層のmypack4パッケージから mymodモジュールをインポートする

パッケージ名(__package__)

__package__ は、現在のパッケージ名を示します。

Python
print(__package__)

ファイル名(__file__)

__file__ は、現在のファイル名を示します。

Python
print(__file__)

モジュール名(__name__)

__name__ は、現在のモジュール名を示します。スクリプトとして起動されたメインモジュールの場合は __main__ という名前が設定されます。下記の例は、ファイルが python コマンドから直接起動された場合のみ実行する処理を記載しています。

Python
if __name__ == "__main__":
    test()

ビルトインモジュール(__builtin__)

__builtin__ は、open() などのビルトインオブジェクトを包含する仮想的なモジュールを示します。

Python
import __builtin__

for line in __builtin__.open("test.txt"):
    print(line)

Copyright(C) 2014-2022 杜甫々
初版:2014年12月30日、最終更新:2022年10月9日
http://www.tohoho-web.com/python/types.html