パッケージとは、複数のモジュール群を管理するための便利な機能です。大きなプログラムでは、必要なモジュールが増えてしまうことがあります。そのような場合、ひとまとまりのモジュールをひとつのパッケージにし、管理することで使い易くすることができます。
パッケージを作成する
今回は、以下の3つのモジュールをパッケージ化します。
test1.py
1 2 |
def add(x, y): return x + y |
test2.py
1 2 |
def sub(x, y): return x - y |
constants.py
1 2 |
PI = 3.14 E = 2.71 |
まず、パッケージ化したいファイルを配置するディレクトリを作成します。今回は、calculator を作成しそのディレクトリの中に data ディレクトリを作成します。そして、上記の test1.py と test2.py を calculator ディレクリに constants.py を dataディレクトリに保存します。
スクリプトファイルが存在することを認識させるためには、 __init__.py というファイルを作成し、ディレクトリに配置しなければなりません。パッケージをインポートすると、このファイルが読み込まれファイルに記述されている処理が実行されるので、初期化用に使用することができます。何も処理をする必要がなければ、中身は空のままでも問題ありません。
最終的に以下のようなファイル構成になります。
1 2 3 4 5 6 7 |
calclator ├ __init__.py ├ test1.py ├ test2.py └ data ├ __init__.py └ constants.py |
これでパッケージ化が完了しました。今回は例のためにこのようなファイル構成にしましたが、この構成に特に意味はありません。
パッケージのモジュールをインポートする
ここでは上記で作成したパッケージのモジュールを利用してみます。
1 2 3 4 5 6 7 |
import calculator.test1 import calculator.test2 import calculator.data.constants if __name__ == "__main__": print calculator.test1.add( calculator.data.constants.PI, 2) # 5.14 print calculator.test2.sub( calculator.data.constants.E, 3) # -0.29 |
上のプログラムのスクリプトファイルは calclator ディレクトリと同じ場所に配置し実行してください。
import 文を使用して自作のパッケージ名とモジュール名を指定してインポートします。これにより、別のプログラムからもパッケージのモジュールのメソッドや変数を使用できるようになります。インポートしたパッケージのモジュールや変数を使用す場合は「パッケージ名.モジュール名.メソッド名」または「パッケージ名.モジュール名.変数名」のように記述して使用できます。
上のプログラムを見るとメソッドを使うために毎回パッケージ名やモジュール名を指定しており、コードの記述量が多くなってしまっています。これは import 文で from を使用することで回避できます。この詳しい方法についてはこちらの「Pythonでモジュールをインポートする:import, from, as」の記事を参考にしてください。
まとめ
Pythonにおけるプログラムのパッケージの作成方法について説明しました。開発するプログラムが小規模の場合、パッケージ化の効果は少ないですが、大規模化して同じメソッドやクラスを再利用する回数が増えると、パッケージ化の効果は大きくなります。パッケージ化のメリットと手順を把握しておきましょう。