ひとつのスクリプトファイルはモジュールとして扱うことができます。モジュールは import文で読み込みます。読み込んだモジュールのクラス、関数、変数は、「モジュール名.識別子」で参照することができます。
def myfunc(): print("Hello!")
import mymod mymod.myfunc() #=> Hello!
モジュールの冒頭には、"""...""" で ドキュメントストリング を記述することができます。
# coding: utf-8 """A sample module""" (略)
複数のモジュールをまとめてパッケージとして扱うことができます。パッケージは、__init__.py という名前のファイルを持つフォルダ、モジュールは .py ファイルです。__init__.py にはパッケージの初期化処理を記述します。なければ空でかまいません。下記の例では、mypack1パッケージの中に mypack2パッケージがあり、mypack2パッケージの中に mymod.pyモジュールが配置されています。
mypack1/ __init__.py mypack2/ __init__.py mymod.py
パッケージの中からモジュールや識別子(クラス、関数、変数...)をインポートするには下記の様にします。
# 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__ に定義しておく必要があります。
__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__ は、現在のパッケージ名を示します。
print(__package__)
__file__ は、現在のファイル名を示します。
print(__file__)
__name__ は、現在のモジュール名を示します。スクリプトとして起動されたメインモジュールの場合は __main__ という名前が設定されます。下記の例は、ファイルが python コマンドから直接起動された場合のみ実行する処理を記載しています。
if __name__ == "__main__": test()
__builtin__ は、open() などのビルトインオブジェクトを包含する仮想的なモジュールを示します。
import __builtin__ for line in __builtin__.open("test.txt"): print(line)