Python入門 - モジュールとパッケージ
モジュールの利用
色々なアプリで共通して利用する関数などを、別ファイルにまとめることで再利用できるようにしたものを、Pythonでは「モジュール」と呼びます。自分でモジュールを作成することもできますし、Pythonに初めから付属している「標準モジュールライブラリ」を利用することもできます。
まずは、標準モジュールライブラリの使い方から説明します。
import
モジュールを利用するためには、利用したいモジュールを「インポート」する必要があります。早速、標準モジュールをインポートしてみましょう。
書式
import モジュール名
モジュール名.関数名
サンプルコード
import math
print(math.sin(3.14 / 2))
print(math.log10(1000))
print(math.fabs(-10.33))
実行結果
0.9999996829318346
3.0
10.33
標準モジュールの1つである「math」をインポートすることで、mathの関数を利用することができます。ここでは三角関数sinを計算する「sin」、10を底とする対数関数を計算する「log10」、絶対値を計算する「fabs」を使っています。
Pythonには膨大な量の標準ライブラリが、初めから用意されています。どんなアプリを作るにもよく利用するような機能がすでにあるということです。そのため、プログラマは自分が独自にやりたいことに、よりエネルギーを向けることができるのです。
全ての標準ライブラリを紹介することはできません。数が多すぎるからです。リファレンスが用意されているので、これを利用するようにしましょう。
日本語:Python 標準ライブラリ
英語:The Python Standard Library
次に、モジュールの一部の関数だけインポートする方法を説明します。
書式
from モジュール名 imort 関数名
関数名
サンプルコード
from math import sin
print(sin(3.14))
実行結果
0.0015926529164868282
mathの中の「sin」しかインポートしない代わりに、sinの頭に、「math.」をつけなくても利用することができます。
モジュールの作成
次に、自分で独自にモジュールを作成して利用する方法について説明します。myModule.pyとmoduleTest.pyは同じフォルダに格納しましょう。
サンプルコード(myModule.py)
def calcLine(x):
y = 10 * x - 5
return (x, y)
サンプルコード(moduleTest.py)
import myModule
print(myModule.calcLine(3.3))
実行結果
(3.3, 28.0)
インポートするときには、「.py」は書きません。
__name__ == " __main__"
さて、自分で作成したモジュールを、他のpyファイルから呼び出すときは問題ないのですが、モジュールそのものを直接実行した時はどうでしょうか。
直接実行されたときにだけ処理されるプログラムを書くためには、次のようにします。
サンプルコード(myModule.py)
def calcLine(x):
y = 10 * x - 5
return (x, y)
if __name__ == "__main__":
print(calcLine(123.45))
実行結果
(123.45, 1229.5)
「__name__」( "__" は "_" アンダースコア2つ )は、デフォルトで定義されている変数です。この__name__には自動で値が代入されるのですが、直接実行されたときには、「"__main__"」が代入されています。そこで、「if __name__ == "__main__"」とすることで、直接実行されたときだけ実行されるプログラムを書くことができます。
パッケージ
いくつかモジュールを作成すると、わかりやすくするために、モジュールを分類したくなってきます。また、何人かで別々にモジュールを作成していると、うっかり同じ名前の関数を作ってしまったりします。
このようなことを解決するために、Pythonには「パッケージ」という機能があります。いわゆる名前空間です。
moduleTest.pyのあるフォルダ内に、myPackageというフォルダを作成し、その中にmodule1.pyというpyファイルを作成します。また、同様にmyPackageフォルダ内に__imit__.pyという空のpyファイルを作成します。これで準備完了です。
サンプルコード(moduleTest.py)
import myPackage.module1
help(myPackage.module1)
print(myPackage.module1.calcPolar(1, 1))
サンプルコード(module1.py)
import math
def calcPolar (x, y):
distance = pow(x**2 + y**2, 0.5)
return (distance, math.atan(y / x))
実行結果
Help on module myPackage.module1 in myPackage:
NAME
myPackage.module1
FUNCTIONS
calcPolar(x, y)
FILE
XXXXXXXXXXXXX/myPackage/module1.py
(1.4142135623730951, 0.7853981633974483)
無事にパッケージ内のモジュールの関数を呼び出すことができました。パッケージの書き方は、フォルダ構成を順番に「. (ドット)」でつなげるだけです。
また、「help」はモジュールのヘルプ情報を表示してくれます。
パッケージを利用するには、パッケージがどこに置いてあるのか pythonが知っている必要があります。myPackageをmoduleTest.pyと同じフォルダに置いたのは、実行されているpyファイルのフォルダは、pythonが知っているからです。
もし、全然別の場所にパッケージを置きたい場合は次のようにして、pythonにパッケージの場所(パス)を指定します。
サンプルコード
import sys
sys.path.append('XXXXXXXXXXX')
このように、sys.pathにパッケージのパスを追加します。