Python Works

Pythonで色々プログラミングする

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にパッケージのパスを追加します。