こんにちは、ミナトです。
「Pythonでよく使う処理やクラスを整理して管理したい」
このような場合はモジュールとパッケージが利用できます。
モジュールとパッケージを利用することで、クラスや関数などを整理して、まとめて管理することができます。
今回はPythonのモジュールとパッケージについて解説します。

- Pythonのモジュール・パッケージの利用方法が知りたい
- Pythonのモジュール・パッケージを作成したい
- Pythonでプログラミングを学びたい
目次
モジュール
モジュールとは
作成した関数やクラスを登録しておくことで、他のプログラムから再利用することができます。
Pythonでは再利用したい関数やクラスをスクリプトファイルに記述しておき、別のプログラムから読み込むことができます。このファイルをモジュールと呼びます。
モジュールの作成
以下のように作業ディレクトリのなかにファイルを作成してください。
- lesson1.py・・・実行するファイル
- module1.py・・・lesson1.pyから読み込むモジュール
プロジェクト名/
├ lesson1.py
├ module1.py
├ modules
├ module2.py
まず、モジュールの中にmy_func()関数を定義します。
def my_func1():
print('モジュールの関数: my_func_1')
続いて、lesson1.pyでモジュールmodule1.pyを読み込み、実行します。
モジュールの読み込みにはimport文を利用します。モジュール名はファイル名から.pyを除いた部分です。
import モジュール名
インポートしたモジュール内の関数の実行はモジュール名.関数名()とします。
import module1
module1.my_func1()
## 出力
モジュールの関数: my_func_1
ディレクトの中のモジュールをインポートする場合、以下のように「.」でつなげて指定します。
import ディレクトリ名.モジュール名
def my_func2():
print('モジュール2の関数: my_func_2')
import modules.module2
modules.module2.my_func2()
## 出力
モジュール2の関数: my_func_2
階層が深くなるとmodules.module2
のように長くなってしまうので、asを利用してモジュールに別名をつけることができます。
import ディレクトリ名.モジュール名 as 別名
以下の様に省略した別名でモジュールを指定することができます。
import modules.module2 as m2
m2.my_func2()
## 出力
モジュール2の関数: my_func_2
パッケージ
パッケージとは
プログラムが大きくなると複数のモジュールを定義することになります。
そのような場合、モジュールが行う処理などに応じて分類分けし、ひとまとめにして管理できます。
このように複数のモジュールをまとめて管理する仕組みをパッケージと呼びます。
パッケージの作成
実際にパッケージを作成して、確認してみましょう。以下の例では、数学的な処理と文字列操作を行う単純なモジュールを作成し、一つのパッケージにします。
以下のディレクトリ構造でファイルを作成してください。
プロジェクト名/
├ lesson1.py
├ my_package
├ __init__.py
├ num_modules
├ __init__.py
├ num_module.py
├ str_modules
├ __init__.py
├ str_module.py
以下のようにモジュールを定義します。
- add_num・・・引数に渡した値を足し算します。
- multiply_num・・・引数に渡した値を掛け算します。
def add_num(a, b):
return a + b
def multiply_num(a, b):
return a * b
- chanage_upper・・・引数に渡した文字列を大文字に変換します。
- change_lower・・・引数に渡した文字列を小文字に変換します。
def chanage_upper(word):
return word.upper()
def change_lower(word):
return word.lower()
lesson1.pyの中でそれぞれモジュールを読み込んで実行します。
from パッケージ名 import モジュール名 as 別名
from my_pckage.num_modules import num_module
from my_pckage.str_modules import str_module
print(num_module.add_num(1, 2))
print(num_module.multiply_num(1, 2))
print(str_module.change_lower('APPLE'))
print(str_module.chanage_upper('amazon'))
## 出力
3
2
apple
AMAZON
モジュールをまとめて読み込む
続いて全てのサブモジュールをまとめて読み込む方法を紹介します。
ディレクトリの__init__.pyに__all__変数を定義することで*(アスタリスク)を用いてまとめてモジュールを読み込むことができます。
以下具体例を用いて確認してみます。
まず、先程のnum_modulesディレクトリにモジュールファイルnum_module2.pyを追加します。
プロジェクト名/
├ lesson1.py
├ my_package
├ __init__.py
├ num_modules
├ __init__.py
├ num_module.py
├ num_module2.py
├ str_modules
├ __init__.py
├ str_module.py
num_modules配下の__init__.pyを編集します。
__all__ = ['num_module', 'num_module2']
この状態でlesson1.pyから*を利用してモジュールを読み込みます。
__init__.pyに__all__を定義して、読み込むモジュールを指定すると*を用いてモジュールをまとめて読み込めます。
このように__init__.py では、__all__ 変数を設定したり、パッケージのための初期化コードを実行することができます。
from my_pckage.num_modules import *
print(num_module.add_num(1, 2))
print(num_module2.subtract_num(1, 2))
## 出力
3
-1
標準ライブラリとサードパーティのライブラリ
標準ライブラリ
Pythonには標準モジュールライブラリが同梱されています。(汎用性の高い便利な機能をまとめたもの)
標準ライブラリについては、公式のドキュメントに詳細が掲載されています。
print()関数などの組み込み関数はモジュールをインポートしなくても自動的に使えますが、標準ライブラリを利用するためには、モジュールのインポートを行う必要があります。
例として、疑似乱数を発生させるrandomモジュールをインポートしてみましょう。
import random
print(random.randint(0, 10))
## 出力
# 実行のたびに0から10の範囲で整数が表示されます。
サードパーティのライブラリ
Pythonには標準ライブラリ以外にも数多くのサードパーティのライブラリが公開されています。
その多くがオープンソースとして公開されていて無料で利用できます。
サードパーティのライブラリを探すにはPyPI(Python Package Index)と言うリポジトリ(パッケージを配布しているサービス)が利用できます。
今回は参考として、termcolorというライブラリをインストールして利用します。
まずは、ターミナルで以下のコマンドを実行して、ライブラリをインストールします。
pip install ライブラリ名
pip install termcolor
## 出力結果に以下のように表示されていればインストール完了です。
Successfully installed termcolor-1.1.0
それでは、インストールしたライブラリを実際に利用してみます。
以下のコードを実行するとテキストが赤色で表示されます。
from termcolor import colored
print(colored('テキストが赤くなります。', 'red'))
まとめ
今回はモジュールとパッケージの利用方法について解説しました。
モジュールやパッケージを利用することで、クラスや関数などを整理して、まとめて管理することができます。
- モジュールは再利用したい関数やクラスを記述したスクリプトファイルのこと
- パッケージはモジュールをまとめて管理する仕組みのこと
- Pythonでは標準ライブラリやサードパティライブラリが提供されている
最後まで読んでいただき、ありがとうございます。
この記事が「面白いな」、「勉強になったな」という方は、SNSでシェアしていただけると嬉しいです。
今回はPythonのモジュール・パッケージについて解説するな😆