Pythonのモジュールとパッケージとは?Java経験者がつまずかないためのやさしい解説ガイド

こんにちは。ゆうせいです。

今回は「Pythonのモジュールとパッケージ」について、Javaを学んだことのある新人エンジニアの方に向けて解説します。

Javaに慣れていると、「importの文法は何となく見覚えがあるけど、モジュールとパッケージの違いがよくわからない…」ということ、ありませんか?

でも安心してください。PythonとJavaでは似ている部分もありますが、考え方や使い方に微妙な違いがあるんです。

この記事では、Javaと対比しながら、モジュールとパッケージの違いや使い分け方を、図や例を交えてじっくり解説していきます!


Pythonにおける「モジュール」とは?

モジュール=.pyファイル

Pythonでは、モジュール(module)とは、1つのPythonファイル(.pyファイル)のことを指します。

Javaで言えば、「クラスファイルに相当するけど、もう少し自由度が高い」存在だと考えてください。


例で確認してみましょう!

ファイル構成

math_utils.py

math_utils.py の中身

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

この math_utils.py がモジュールです。このファイルを他のPythonファイルからimportして使うことができます。

使用例(main.py)

import math_utils

print(math_utils.add(5, 3))        # 出力:8
print(math_utils.subtract(5, 3))   # 出力:2


パッケージとは何か?

パッケージ=モジュールをまとめた「フォルダ」

Pythonにおけるパッケージ(package)とは、複数のモジュール(.pyファイル)をまとめたディレクトリ(フォルダ)のことです。

Javaで言えば、com.example.utils などのパッケージに近いですが、Pythonではフォルダがそのままパッケージとして扱われるという点が特徴です。


パッケージの構成例

utils/
├── __init__.py
├── math_utils.py
└── string_utils.py
  • utils フォルダがパッケージ
  • 中には math_utils.pystring_utils.py というモジュールが入っている
  • __init__.py は「このフォルダはパッケージですよ」とPythonに教えるためのファイル(※Python 3.3以降はなくても動くが、明示的にあると良い)

使い方の例

from utils import math_utils

print(math_utils.add(10, 7))  # 出力:17

Javaの import com.example.utils.MathUtils に近いですよね?


モジュールとパッケージの違いまとめ

項目モジュールパッケージ
正体1つの .py ファイル複数のモジュールを含むフォルダ
Javaでの対応1つのクラスファイル(やや近い)Javaのパッケージに近い
import例import sample_modulefrom mypackage import module

なぜ分けるの?──メリットと注意点

メリット

  • コードの再利用が簡単:よく使う処理をモジュール化すれば、何度も書かなくて済む
  • 整理整頓できる:機能別にモジュールを分けて、フォルダにまとめることで読みやすくなる
  • チーム開発での役割分担が明確になる:担当ごとにモジュールを分ければ衝突しにくい

注意点

  • モジュール名が他のライブラリと被ると、import時にエラーになることがある(例:math.py はPython標準の math と衝突するかも)
  • パッケージ階層が深くなりすぎると、可読性が落ちる

Javaとの違いを意識しておこう!

JavaとPythonのimport文の挙動は似て非なるものです。

特徴JavaPython
クラスが基本単位×(関数や定数もトップレベルに書ける)
importの対象パッケージ名.クラス名モジュール(.pyファイル)やその中の関数
コンパイル必要不要(インタプリタ)

Pythonでは「関数を直接import」したり、「ファイルそのものをimport」できるので、より柔軟でフラットな構造を取ることが可能なんです。


よくある質問Q&A

Q1:Javaでいう「staticメソッド」はどう表現するの?

Pythonでは、モジュールの関数は基本的に全部「static」のようなものです。クラスに属さない、トップレベルの関数として定義できます。

# math_utils.py
def square(x):
    return x * x

クラスを作らなくても、square(2) で使えます!


Q2:クラスをまとめたモジュールも作れる?

もちろん可能です。例えば以下のようにクラスだけを定義した .py ファイルを作ればOKです。

# person.py
class Person:
    def __init__(self, name):
        self.name = name


今後の学習の指針

Pythonのモジュールとパッケージは、小規模プロジェクトではシンプルに、大規模になればなるほど構造的に設計できるようになっています

今後はこんな点を意識して学んでみてください:

  • __init__.py の中で何ができるのか?
  • __name__ == "__main__" の意味と使い方
  • サードパーティパッケージ(例:numpy, pandas)の構造を観察してみる
  • 自作パッケージの公開(PyPIへの登録)方法

「モジュールって結局何?」「パッケージと何が違うの?」といった疑問が、この記事で少しでも晴れたならうれしいです。

ぜひ手を動かして、自分でも簡単なモジュールを作ってみてください!実際に作ってみると、グッと理解が深まりますよ。

それでは、また次回お会いしましょう。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。