Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのパッケージとは?モジュールとの違いをわかりやすく解説

Pythonにおける「パッケージ」を正しく理解するには、まず「モジュール」について知っておく必要があります。この記事では、モジュールとパッケージの基本概念、両者の違い、そして実際のインポート時の挙動について、具体例を交えながらわかりやすく解説します。

モジュールとは何か

Pythonでは、任意の .py ファイルが1つのモジュールとして扱われます。モジュール名は、ファイル名から拡張子「.py」を除いたもの、すなわちそのモジュールの __name__ 属性に相当する名前になります。たとえば sample.py というファイルは、「sample」という名前のモジュールです。

パッケージとは何か

パッケージとは、複数のPythonモジュールをまとめた集合体のことです。具体的には、Pythonモジュール群を格納したディレクトリであり、その中に追加で __init__.py ファイルが配置されているものを指します。

この __init__.py の存在こそが重要なポイントです。単にPythonスクリプトがいくつか入っているだけの普通のディレクトリと、正式な「パッケージ」を区別する役割を果たしています。

また、パッケージは任意の深さまで入れ子(ネスト)構造にできます。ただし、その条件として、各階層のディレクトリにそれぞれ対応する __init__.py ファイルが含まれている必要があります。

モジュールとパッケージの違い:インポート時の挙動

ここで少し意外に感じるかもしれませんが、モジュールをインポートしてもパッケージをインポートしても、Pythonが生成するオブジェクトの型は常に module 型です。つまり、モジュールとパッケージの区別は、実質的にはファイルシステム上のレベルでのみ存在するということです。

ただし注意点があります。パッケージをインポートした場合、直接参照できるのはそのパッケージの __init__.py 内に定義された変数・関数・クラスのみです。サブパッケージやサブモジュールは自動的には読み込まれません。

具体例:datetimeモジュールとdateサブモジュール

たとえば、標準ライブラリの datetime パッケージには date というサブモジュールが含まれています。しかし、datetime をインポートしただけでは、date は利用できません。別途インポートする必要があります。

>>> import datetime
>>> date.today()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'date' is not defined
>>> from datetime import date
>>> date.today()
datetime.date(2017, 9, 1)

このように、最初の import datetime の直後に date.today() を呼び出すと NameError が発生します。一方、from datetime import date と明示的にインポートすれば、正常に date.today() を実行できることが確認できます。

まとめ

  • Pythonファイル1つ1つがモジュールである
  • パッケージは __init__.py を含むモジュール群のディレクトリ
  • インポート後のオブジェクトはどちらも module 型
  • パッケージをインポートしても、サブモジュールまでは自動で読み込まれない

モジュールとパッケージの仕組みを理解しておくと、大規模なプロジェクトのコード整理や、外部ライブラリのインポートエラーのトラブルシューティングにも役立ちます。

  1. Pythonの予約キーワード(予約語)とは?一覧と確認方法をわかりやすく解説

    予約語(キーワード)とは予約語(reserved words)は「キーワード」とも呼ばれ、言語仕様の中であらかじめ意味と構文が定義された特別な単語のことです。条件分岐やループ処理といったプログラミング命令を記述する際には、必ずこれらのキーワードを使用します。重要なポイントとして、予約語は変数名や関数名など、他のプログラミング要素の識別子(identifier)として使用できません。例えば「def」や「import」という名前の変数を作成しようとすると、SyntaxError(構文エラー)が発生します。Python 3の予約キーワード一覧以下は、Python 3で定義されている予約キーワードの一

  2. Pythonの「モジュール」と「パッケージ」の違いとは?初心者向けにわかりやすく解説

    モジュールとパッケージの基本的な違いPythonでは、任意の .py ファイルはすべてモジュールとして扱われます。モジュール名は、拡張子 .py を除いたファイル名そのものであり、モジュール内部では __name__ 属性として参照できます。一方、パッケージとは複数のPythonモジュールをまとめたものです。具体的には、モジュール群が格納されたディレクトリに __init__.py ファイルが配置されているものを指します。この __init__.py の存在こそが、単なる「Pythonスクリプトの入ったフォルダ」と「パッケージ」を区別する目印となります。また、各階層のディレクトリにそれぞれ _