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

1.パッケージの基本構成
1.1 ディレクトリ構成例
project/
main.py
package1/
__init__.py
module1.py
module2.pypackage1フォルダがパッケージです。__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 - b1.3. main.pyからパッケージの利用
ファイル名: main.py
import package1.module1
result = package1.module1.add(10, 3)
print(f"10 + 3 = {result}")実行結果
10 + 3 = 13import package1.module1でmodule1モジュールを読み込みます。- フルネーム
package1.module1.add()で関数にアクセス。
2.パッケージからの便利なimport
2.1. from-import文での利用
ファイル名: main.py(修正版)
from package1 import module1
print(module1.subtract(10, 4))実行結果
62.2. モジュール内の関数だけ直接import
ファイル名: main.py(修正版)
from package1.module1 import add
print(add(7, 2))実行結果
92.3. importの別名
ファイル名: main.py(修正版)
import package1.module1 as mod
print(mod.add(1, 1))実行結果
23. __init__.pyの活用
3.1. __init__.pyでモジュール関数をまとめてimport
ファイル名:__init__.py
# package1/__init__.py
from .module1 import add, subtract3.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の変更を柔軟にできるのも大きなメリットです。ぜひ実践で活用してみてください。
