PR

__init__.pyって空ファイルは何もの?

Python


Pythonのプロジェクトを作成する際に、__init__.pyファイルを見たことがあるかもしれません。しかし、そのファイルが具体的に何をしているのか、なぜ必要なのかを理解している人は少ないかもしれません。この記事では、Pythonの__init__.pyファイルについて解説します。

スポンサーリンク

__init__.pyファイルとは何か?

Pythonのパッケージ(モジュールの集合)内にある__init__.pyファイルは、そのディレクトリがPythonパッケージであることを示すために存在します。このファイルは、Pythonインタープリタによってパッケージがインポートされたときに最初に実行されるコードを含めることができます。

あるディレクトリを、パッケージが入ったディレクトリとしてPythonに扱わせるには、ファイル __init__.pyが必要です。このファイルを置かなければならないのは、よくある名前のディレクトリにより、モジュール検索パスの後の方で見つかる正しいモジュールが意図せず隠蔽されてしまうのを防ぐためです。最も簡単なケースではただの空ファイルで構いませんが、パッケージのための初期化コードを実行したり、後述の変数を設定してもかまいません。

6. Modules — Python 3.12.2 documentation

まとめると

  1. フォルダに入ったpythonファイル群に対して『これはパッケージですよ』と認識させる
  2. インポートする時の初期化を行う
スポンサーリンク

なぜ__init__.pyが必要なのか?

  • パッケージの初期化: __init__.pyファイルは、パッケージが正しく初期化されるようにするために使用されます。パッケージ内のモジュールやリソースの初期化を行うための場所です。
  • モジュールのインポート: パッケージがインポートされると、__init__.pyファイルが最初に読み込まれます。このファイルには、パッケージ内の他のモジュールをインポートするためのコードを含めることができます。
  • 名前空間の設定: __init__.pyファイルは、パッケージ内で名前空間を定義するために使用されます。これにより、パッケージ内の異なるモジュールが他のモジュールと競合することなく使用されることが保証されます。

__init__.pyの例

__init__.pyの一番のメリットは異なるディレクトリのファイルをインポートする時です。例えば、次のようなディレクトリ構造があるとします.

.
|── test
|     |── __init__.py
|     |── import_test.py

ファイルの中身:

# import_test.py

print'import_test.py is imported !'

def print_name():
    print __name__

続いてimport_testモジュールをインポートするとしっかりファイルが読み込めます。

import test.import_test
->import_test.py is imported !

Tips:驚愕の事実

仕事の都合上Pythonの2系をずっと使っていたので少し前まで知りませんでしたが、Python3系の3.3から不要になったそうです。
www.python.org

(2024年2月27日追記)不要にはなっていませんでした。特殊なパッケージにおいて不要になるよということでした。

スポンサーリンク

まとめ

__init__.pyファイルは、Pythonのパッケージにおいて重要な役割を果たします。パッケージの初期化や名前空間の設定など、さまざまな目的に使用されます。正しく使用することで、Pythonのプロジェクトをより整理された形で管理することができます。

コメント

タイトルとURLをコピーしました