Python: ライブラリ、パッケージ、モジュールの関係・違い

Pythonの特徴の1つとして、ライブラリの豊富さがあります。 そして「ライブラリ」に関連する用語として 「パッケージ」や「モジュール」といった用語も良く出てきます。

これらの用語の違いをあいまいにしたまま学習を進めるよりも、 ちゃんと理解しておいた方が後々の自分のためになります。
そこでこの記事ではこれらの用語を「モジュール」「パッケージ」 「ライブラリ」の順番に説明し、関係性や違いも解説します。

モジュール

モジュールとは関数・クラス・変数などを「1つの.pyファイル」として まとめたもので、モジュールの拡張子は「.py」です。 そして「ファイル名.py」のファイル名の部分が モジュール名となります。「モジュール = 1つのファイル」です。

例えば、標準モジュールの1つとして正規表現を扱う「re.py」があります(下図)。

reモジュール
ファイル「re.py」がモジュールで、「re」がモジュール名となります。 このモジュールを使う場合「import re」と記述します。
import文で呼び出すことで、 モジュールの中に記述されている関数・クラスといった機能を使うことができます。

モジュールの中には複数の関数やクラスが含まれますから、 「モジュール」と「関数・クラス」の関係を図にすると次のようになります。

モジュールと関数・クラスの関係

パッケージ

パッケージとは、複数のモジュールをディレクトリ(フォルダ)に入れて、 ひとまとまりにしたものです。 もう一つ条件があって、ディレクトリの中に__init__.pyという名前のファイルを 入れる必要があります。 つまり複数のモジュールと__init__.pyを含めたディレクトリが パッケージで、ディレクトリの名前がパッケージ名となります。

例えば、標準パッケージの1つとして「json」パッケージがあります。 jsonパッケージのディレクトリ(フォルダ)を見ると下図のように、 複数のモジュール(.pyファイル)と「__init__.py」ファイルが存在しているのがわかります。

jsonパッケージ

パッケージを使う場合もモジュールと同じようにimport文を使って 「import パッケージ名」と記述します。 import文で呼び出すことでパッケージに含まれる機能を利用できます。

パッケージには複数のモジュールが含まれますから、 「パッケージ」と「モジュール」の関係を図にすると下のようになります。

パッケージとモジュールの関係

ライブラリ

Pythonを学び始めた時に、ライブラリという用語の意味が良くわからないのは、 ライブラリがいろんな意味合いで使われるからです。 具体的な意味の場合もありますし、抽象的な意味の場合もあります。 どんな意味合いで使われているかは、前後の文脈から自分で判断する必要があります。

大体次の4つの中のどれかの意味合いで「ライブラリ」が使われます。

  1. 複数のパッケージをまとめてインストールできるようにしたものをライブラリという。
  2. 特定のモジュールやパッケージを指してライブラリと言う。
  3. 関数・モジュール・パッケージを総称してライブラリと言う。
  4. 他のプログラムから呼び出されることを前提とした汎用的なプログラムをライブラリと言う。

上記のようないろんな意味合いで使われます。 その時々の文脈から自分で適切なものを選択してください。

ライブラリには複数のパッケージが含まれたり、 モジュール・パッケージを総称してライブラリと言うことから、 「ライブラリ」と「パッケージ」「モジュール」の関係を図にすると次のようになります。

ライブラリとパッケージの関係

ライブラリには「標準ライブラリ」と「外部ライブラリ」の2種類があります。 標準ライブラリはPythonのインストール時に同時にインストールされているので、 すぐに使うことができます。一方外部ライブラリは自分で別途インストールする 必要があります。

Python