2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】モジュール、ライブラリ、パッケージの違いを今更整理する

2
Posted at

はじめに

Pythonを学習していると「モジュール」「パッケージ」「ライブラリ」という用語が頻繁に登場します。これらは似たような文脈で使われるため、混同しがちです。

この記事では、3つの用語の違いと関係性を整理し、実際の開発でどのように使い分けられているかを解説します。

この記事で分かること

  • モジュール、パッケージ、ライブラリそれぞれの定義
  • 3つの包含関係と違い
  • 実際のインポート方法と使い分け

対象読者

  • Pythonの基本文法を学習中の方
  • これらの用語の違いが曖昧な方

モジュールとは

モジュールは、Pythonコードが書かれた単一の.pyファイルのことです。

定義と役割

モジュールは関数、クラス、変数などをまとめた最小単位です。コードを機能ごとに分割し、再利用可能にする役割を持ちます。

具体例

例えば、math_utils.pyというファイルを作成したとします。

# math_utils.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

PI = 3.14159

このmath_utils.pyがモジュールです。他のファイルから以下のようにインポートして使用できます。

# main.py
import math_utils

result = math_utils.add(5, 3)
print(result)  # 8
print(math_utils.PI)  # 3.14159

Pythonの標準ライブラリに含まれるmathosなども、それぞれ単一のモジュールです。

パッケージとは

パッケージは、複数のモジュールをディレクトリ構造でまとめたものです。

定義と役割

関連するモジュールを階層的に整理し、名前空間を管理します。大規模なプロジェクトでコードを体系的に管理するために使われます。

ディレクトリ構造

パッケージは以下のようなディレクトリ構造を持ちます。

mypackage/
    __init__.py
    module1.py
    module2.py
    subpackage/
        __init__.py
        module3.py

__init__.pyの役割

__init__.pyはディレクトリをパッケージとして認識させるためのファイルです。Python 3.3以降は空でも構いませんが、パッケージの初期化処理やインポートの簡略化に使われます。

# mypackage/__init__.py
from .module1 import some_function
from .module2 import SomeClass

__all__ = ['some_function', 'SomeClass']

具体例

# mypackage/module1.py
def greet(name):
    return f"Hello, {name}!"

# mypackage/module2.py
class Calculator:
    def add(self, a, b):
        return a + b

使用例:

# main.py
from mypackage import module1
from mypackage.module2 import Calculator

print(module1.greet("World"))  # Hello, World!
calc = Calculator()
print(calc.add(3, 4))  # 7

代表的なパッケージとして、numpypandasrequestsなどがあります。

ライブラリとは

ライブラリは、特定の機能を提供する再利用可能なコードの集まりを指す概念的な用語です。

定義と役割

ライブラリは明確な技術的定義というよりも、一般的な呼び方です。1つのモジュールで構成される場合もあれば、複数のパッケージを含む大規模なものもあります。

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

  • 小規模なライブラリ:単一のモジュールで構成されることもある
  • 中規模なライブラリ:1つのパッケージで構成される
  • 大規模なライブラリ:複数のパッケージやモジュールで構成される

具体例

単一モジュールのライブラリ

  • calendar:カレンダー機能を提供

パッケージ構造のライブラリ

  • requests:HTTP通信を簡単にするライブラリ
  • numpy:数値計算用のライブラリ
  • Django:Webフレームワーク(多数のパッケージを含む大規模ライブラリ)
import calendar
import requests
import numpy as np

いずれも「ライブラリ」と呼ばれますが、内部構造は異なります。

3つの関係性

図解で理解する

包含関係の整理

重要なポイント

  • モジュールが最小単位
  • パッケージはモジュールをまとめる仕組み
  • ライブラリは全体を指す概念的な用語

実践的な使い分け

インポート方法の違い

モジュールのインポート

import math_utils
from math_utils import add

パッケージからのインポート

import mypackage.module1
from mypackage.module1 import greet
from mypackage import module1

ライブラリ全体を指す場合

# 「numpyライブラリを使う」と表現
import numpy as np

# 「requestsライブラリをインストール」
# pip install requests

実際の開発での使われ方

開発時の会話例:

  • 「このプロジェクトではrequestsライブラリを使います」
  • 「utilsというパッケージを作って共通処理をまとめよう」
  • 「date_helper.pyというモジュールを追加しました」

用語の使い分けは文脈によって柔軟です。技術的には正確でなくても、コミュニケーションが成立すれば問題ありません。

まとめ

用語 定義 具体例
モジュール 単一の.pyファイル math_utils.pyossys
パッケージ モジュールをまとめたディレクトリ numpyのディレクトリ構造、myapp/utils/
ライブラリ 再利用可能なコードの集まり(概念) requestspandasDjango

覚えておくべきポイント

  • モジュールは最小単位の.pyファイル
  • パッケージはモジュールを階層的に整理する仕組み
  • ライブラリは全体を指す抽象的な用語
  • 実際の開発では厳密に区別せず、文脈で使い分けることが多い

これらの違いを理解しておくと、Pythonのドキュメントや技術記事がより理解しやすくなります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?