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

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

モジュール(module)

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

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

mymod.myfunc()                      #=> Hello!

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

# 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)

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

# 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"]

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

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)

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

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 には、. や .. を用いて、パッケージを相対的に指示することができます。

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

パッケージ名(__package__)

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

print __package__

ファイル名(__file__)

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

print __file__

モジュール名(__name__)

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

if __name__ == "__main__":
    test()

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

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

import __builtin__

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

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