Pythonでは、モジュールとパッケージの違いを理解することが重要です。
モジュール
モジュールは単純にPythonファイルです。ファイル名がそのままモジュール名となり、import文を使って他のPythonファイルから関数やクラスを使用できます。
import my_module
上記の例では、my_module.pyをインポートしています。
パッケージ
一方、パッケージは複数のモジュールを含むディレクトリです。ディレクトリがパッケージとして認識されるためには、__init__.pyファイルが必要です。このファイルはパッケージの初期化処理に使われ、サブモジュールやサブパッケージのインポートを管理します。
例えば、次のようなパッケージ構造があります。
my_package/
__init__.py
module1.py
module2.py
my_package内のモジュールを次のようにインポートできます。
from my_package import module1
Python 3.3以降の変更
Python 3.3からはPEP 420によって、__init__.pyがなくてもパッケージが認識される「ネームスペースパッケージ」が導入されました。これにより、複数のディレクトリからパッケージを拡張できるようになりました。
まとめ
- モジュールは
Pythonファイルです。 - パッケージはモジュールの集合をディレクトリで管理し、
__init__.pyで初期化されます。 - ネームスペースパッケージは
Python3.3以降、__init__.pyなしでディレクトリをパッケージとして扱える仕組みです。