Pythonのパッケージとは。パッケージの基本と使い方のイメージ画像

Pythonのパッケージとは。パッケージの基本と使い方

  • 公開日:2018/11/29
  • 更新日:2018/11/30
  • 投稿者:n bit

Pythonには機能を追加するためのモジュールをディレクトリ内にまとめて管理できるパッケージ(package)があります。今回はそのパッケージの基本的な解説と様々なインポート方法、独自パッケージの作成方法などの使い方に関する解説が中心です。

  • Python

この記事は約 分で読めます。(文字)

Pythonのパッケージ(package)とは

Pythonのパッケージ(packagel)とは新たな機能追加するためのもので前回学習したモジュールを1つのディレクトリ内にまとめて管理できるようにしたものです。

ファイル単位で関数やクラス等様々な機能をひとかたまりにまとめることができるものが『モジュール』、それら各モジュールをサブモジュールとしてディレクトリ内にまとめたものが『パッケージ』とイメージしておけばよいでしょう。

モジュールについてはこちらのページで復習できます。

独自パッケージの作成方法

パッケージもモジュールと同じで実際に作成してインポートしてみたほうが分かりやすいと思いますので簡単に独自のパッケージを作成してみましょう。

モジュールの作成

パッケージにまとめるモジュールを新たに2つ作成しパッケージ化します。

1つ目に数値を処理できる関数を持ったモジュールを下記コード内容で作成しましょう。ファイルは任意のディレクトリに『test_mod1.py』と言うファイル名で保存しました。

def add_square2(a, b):

return (a + b) ** 2

def add_square5(a, b):
return (a + b) ** 5

パッケージ内に記述したコードの説明ですが、『add_square2』は引数で受け取った数字を足し合わせて2乗する関数、『add_square5』は引数で受け取った数字を足しに合わせて5乗する簡単な関数です。

2つ目のモジュールは下記のコードを先ほどと同じディレクトリに『test_mod2.py』と言うファイル名で保存しました。

def text_lower(a):

return a.lower()

def text_upper(a):
return a.upper()

こちらは文字列を操作する関数で引数で受け取った文字列を全て小文字化する関数『text_lower』と全て大文字化する関数『text_upper』を記述しています。

パッケージ化

2つのモジュール『test_mod1.py』と『test_mod2.py』を保存しているディレクトリをパッケージ化します。パッケージ化するには同じディレクトリ内に『__init__.py』ファイルを作成するだけです。『__init__.py』ファイルの中身は空白で問題ありません。

  • initの前後はアンダーバー『_』が2つずつあることに注意してください。

パッケージのディレクトリがある階層と同じところにパッケージをインポートして実行するための『main.py』と言うファイルを作成しておきましょう。『main.py』内に記述するコードについては後ほど解説します。

今回はすべてのファイルを『test_pac』ディレクトリに保存しています。ディレクトリとすべてのファイルの階層構造は最終以下のようになりました。

+-- main.py   (パッケージをインポートして実行するファイル)

+-- test_pac (パッケージ)
+-- __init__.py
+-- test_mod1.py (モジュール)
+-- test_mod1.py (モジュール)

これで各モジュールをまとめてパッケージ化する処理は完了です。

パッケージのインポートと実行方法

パッケージを利用するためには実行ファイル『main.py』にインポートする必要があります。インポート方法がいくつかありますのでそれを紹介しましょう。

パッケージのインポート方法は基本的にモジュールのインポート方法と考え方は同じです。

パッケージからモジュール単位でインポートして実行する方法

まず1番ベーシックな方法はパッケージからモジュール単位でのインポートです。実行ファイルの1行目に次のように記述してモジュール単位でインポートします。

from test_pac import test_mod1

『from』の後ろに半角スペースを空けてパッケージ化したディレクトリ名、半角スペース『import』半角スペースと続けてインポートしたいモジュール名(パッケージのファイル名から『.py』を除いたもの)を記述します。

  • from パッケージ名 import モジュール名(モジュールのファイル名から『.py』を除いたもの)

複数のモジュールを同時にインポートする場合は下記のように『,』でつなげて記述します。

from test_pac import test_mod1, test_mod2
  • from パッケージ名 import モジュール名1, モジュール名2, モジュール名3, ・・・・

モジュール内の関数を実行するにはモジュール名の後ろにピリオド『.』を挟み関数名を入力して呼び出します。関数の実行方法は通常の関数と同じで関数名の後に括弧つけて引数を渡します。

print(test_mod1.add_square2(1, 2))

print(test_mod1.add_square5(1, 2))

print(test_mod2.text_lower('Python'))
print(test_mod2.text_upper('Python'))

これらのコードを『main.py』と言うファイルに記述し保存してください。保存後cdコマンドを使って保存先のディレクトリへ移動し『main.py』を実行します。

main.py内のコード

from test_pac import test_mod1, test_mod2


def main():
print(test_mod.add_square2(1, 2))
print(test_mod.add_square5(1, 2))

print(test_mod2.text_lower('Python'))
print(test_mod2.text_upper('Python'))

if __name__ == "__main__":
main()

3、10、11行目のコード

def main():




if __name__ == "__main__":
main()

は、まだ解説していませんがとりあえずPythonファイルを直接実行するときの決まり事だと覚えておいてください。この記述によって『main.py』を実行したときは自動的にmain関数が実行されるようになっています。

実行用コード

$ cd 保存先ディレクトリ

$ python main.py

出力結果

9

243
python
PYTHON

別名でモジュールをインポートして実行する方法

インポートするモジュール名を別名でインポートする方法です。モジュール名が長い時などに簡略化することができます。実行ファイルの1行目に次のように記述してモジュールをインポートしてください。

from test_pac import test_mod1 as t_m1

from test_pac import test_mod2 as t_m2

『as』の後に半角スペースを空けて任意の別名を記述します。

  • from パッケージ名 import モジュール名 as 任意の別名

パッケージ内の関数を実行するには任意の別名の後ろにピリオド『.』を挟み関数名を入力して呼び出します。

print(t_m1.add_square2(1, 2))

print(t_m1.add_square5(1, 2))

print(t_m2.text_lower('Python'))
print(t_m2.text_upper('Python'))

これらのコードを『main.py』と言うファイルに記述し保存してください。保存後cdコマンドを使って保存先のディレクトリへ移動し『main.py』を実行します。

main.py内のコード

from test_pac import test_mod1 as t_m1

from test_pac import test_mod2 as t_m2

def main():
print(t_m1.add_square2(1, 2))
print(t_m1.add_square5(1, 2))

print(t_m2.text_lower('Python'))
print(t_m2.text_upper('Python'))

if __name__ == "__main__":
main()

実行用コード

$ cd 保存先ディレクトリ

$ python main.py

出力結果

9

243
python
PYTHON

関数やクラス単位でインポートして実行する方法

先ほどまではモジュール単位でインポートしましたが特定の関数のみインポートすることも可能です。またすべての関数をインポートしておくことで関数名のみ記述して実行させることができます。

実行ファイルの1行目に次のように記述してモジュール内の関数をインポートしてください。

from test_pac.test_mod1 import add_square2

from test_pac.test_mod2 import text_lower

複数の関数を同時にインポートする場合は下記のように『,』で関数名をつなげて記述します。

from test_pac.test_mod1 import add_square2, add_square5

from test_pac.test_mod2 import text_lower, text_upper
  • from パッケージ.パッケージ名 import 関数名1, 関数名2, 関数名3, ・・・・

先程まで

  • fromパッケージ名 import モジュール名

となっていましたが

  • fromパッケージ名.モジュール名 import 関数名

に変わっていることに注意してください。

関数を実行するには直接関数名を入力して呼び出します。

print(add_square2(1, 2))

print(add_square5(1, 2))

print(text_lower('Python'))
print(text_upper('Python'))

これらのコードを『main.py』と言うファイルに記述し保存してください。保存後cdコマンドを使って保存先のディレクトリへ移動し『main.py』を実行します。

main.py内のコード

from test_pac.test_mod1 import add_square2, add_square5

from test_pac.test_mod2 import text_lower, text_upper

def main():
print(add_square2(1, 2))
print(add_square5(1, 2))

print(text_lower('Python'))
print(text_upper('Python'))

if __name__ == "__main__":
main()

実行用コード

$ cd 保存先ディレクトリ

$ python main.py

出力結果

9

243
python
PYTHON

関数やクラスを一括でインポートして実行する方法

通常の完成コードで推奨される記述方法ではありませんがテスト時などに複数の関数を一括して読み込む簡単な記述方法があります。

実行ファイルの1行目に次のように記述してモジュール内の関数をインポートしてください。

from test_pac.test_mod1 import *

from test_pac.test_mod2 import *

アスタリスク『*』がすべての関数を表しています。関数の実行は直接関数名を入力するだけで可能です。

print(add_square2(1, 2))

print(add_square5(1, 2))

print(text_lower('Python'))
print(text_upper('Python'))

これらのコードを『main.py』と言うファイルに記述し保存してください。保存後cdコマンドを使って保存先のディレクトリへ移動し『main.py』を実行します。

main.py内のコード

from test_pac.test_mod1 import *

from test_pac.test_mod2 import *

def main(): print(add_square2(1, 2))
print(add_square5(1, 2))

print(text_lower('Python'))
print(text_upper('Python'))

if __name__ == "__main__":
main()

実行用コード

$ cd 保存先ディレクトリ

$ python main.py

出力結果

9

243
python
PYTHON

今日のdot

独自のパッケージを利用することでPythonのコードを整理し管理しやすくできます。積極的にパッケージも利用していきましょう。