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.py
やstring_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_module | from mypackage import module |
なぜ分けるの?──メリットと注意点
メリット
- コードの再利用が簡単:よく使う処理をモジュール化すれば、何度も書かなくて済む
- 整理整頓できる:機能別にモジュールを分けて、フォルダにまとめることで読みやすくなる
- チーム開発での役割分担が明確になる:担当ごとにモジュールを分ければ衝突しにくい
注意点
- モジュール名が他のライブラリと被ると、import時にエラーになることがある(例:
math.py
はPython標準のmath
と衝突するかも) - パッケージ階層が深くなりすぎると、可読性が落ちる
Javaとの違いを意識しておこう!
JavaとPythonのimport文の挙動は似て非なるものです。
特徴 | Java | Python |
---|---|---|
クラスが基本単位 | ○ | ×(関数や定数もトップレベルに書ける) |
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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年6月22日論理記号の起源をたどる:∀ や ∃ はどこから来たのか?
山崎講師2025年6月22日集合記号「⊂」「∪」「∈」「∅」はどこから来た? ルーツとエピソードから学ぶ“集合の記号”の歴史
山崎講師2025年6月22日「=」「≠」「<」「>」の意味、知ってる? 数字の関係を表す記号の由来をやさしく解説
山崎講師2025年6月22日四則演算の記号はなぜその形に?数学記号の由来をやさしく解説