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で初期化されます。
  • ネームスペースパッケージはPython 3.3以降、__init__.pyなしでディレクトリをパッケージとして扱える仕組みです。