
【6日でできるPython入門】パッケージ
Pythonプログラムを大規模に開発する際、モジュールだけでは管理が難しくなることがあります。
そこで登場するのが「パッケージ」です。
パッケージはモジュールを格納したディレクトリであり、モジュールをまとめて階層的に管理するための「入れ物」になります。
複数のモジュールを含むプロジェクトをきれいに整理でき、他の開発者と共同作業しやすくなります。
ここでは、パッケージの構成方法や使い方、__init__.py
の役割などを実例とともに詳しく解説します。

1.パッケージの基本構成
1.1 ディレクトリ構成例
project/
main.py
package1/
__init__.py
module1.py
module2.py
package1
フォルダがパッケージです。__init__.py
は空ファイルでも必須で、Pythonに「ここはパッケージです」と認識させます。
1.2. モジュール例 (module1.py
)
ファイル名: module1.py
# package1/module1.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
1.3. main.py
からパッケージの利用
ファイル名: main.py
import package1.module1
result = package1.module1.add(10, 3)
print(f"10 + 3 = {result}")
実行結果
10 + 3 = 13
import package1.module1
でmodule1
モジュールを読み込みます。- フルネーム
package1.module1.add()
で関数にアクセス。
2.パッケージからの便利なimport
2.1. from-import文での利用
ファイル名: main.py(修正版)
from package1 import module1
print(module1.subtract(10, 4))
実行結果
6
2.2. モジュール内の関数だけ直接import
ファイル名: main.py(修正版)
from package1.module1 import add
print(add(7, 2))
実行結果
9
2.3. importの別名
ファイル名: main.py(修正版)
import package1.module1 as mod
print(mod.add(1, 1))
実行結果
2
3. __init__.py
の活用
3.1. __init__.py
でモジュール関数をまとめてimport
ファイル名:__init__.py
# package1/__init__.py
from .module1 import add, subtract
3.2. main.py
の変更
ファイル名: main.py(修正版)
import package1
print(package1.add(5, 5))
print(package1.subtract(9, 4))
実行結果
10
5
解説
__init__.py
にfrom .module1 import add, subtract
を書くと、
パッケージ名から直接これらの関数を呼べるようになります。- モジュール名を隠蔽し、呼び出し側のコードをシンプルに保てます。
3.3. __init__.py
内に独自関数も定義可能
ファイル名:__init__.py(修正版)
# package1/__init__.py
def info():
print("これはpackage1のパッケージです。")
from .module1 import add
ファイル名: main.py(修正版)
import package1
package1.info()
print(package1.add(3, 7))
実行結果
これはpackage1のパッケージです。
10
まとめ表:パッケージの基本
項目 | 内容 | ポイント |
---|---|---|
パッケージ | モジュールをまとめたフォルダ | __init__.py が必須(Python 3.3以降は不要だが推奨) |
モジュール | Pythonファイル(.py) | 関数・クラスのまとまり |
import文 | パッケージやモジュールを読み込む | import package.module |
from-import文 | 必要な部分だけを読み込む | from package.module import func |
__init__.py | パッケージ初期化用ファイル | パッケージ名でアクセス可能にする役割もある。 |
相対import | from .module import func のようにパッケージ内を参照 | 大規模プロジェクトでコード整理がしやすくなる。 |
パッケージを使いこなせば、大規模なPythonプロジェクトを分かりやすく整理し、メンテナンスや拡張もしやすくなります。__init__.py
の工夫でAPIの変更を柔軟にできるのも大きなメリットです。ぜひ実践で活用してみてください。