What is __init__.py for?

The __init__.py file is used to indicate that a directory should be considered a Python package. It is a special file that Python looks for when importing modules from a package. The presence of an __init__.py file in a directory signifies that the directory should be treated as a package, and it can contain initialization code, package-level attributes, and submodules.

The following image shows the structure of a standard Python module.

What is __init__.py for

Following are some key points about the __init__.py file in Python:

Package Initialization

When Python encounters an __init__.py file in a directory, it recognizes that directory as a package. This allows you to organize related modules and subpackages in a structured manner.

Namespace Package

In Python 3.3 and later, an empty __init__.py file can also indicate a "namespace package." Namespace packages are used to spread a package across several directories or even in different locations, enabling modular distribution and installation of libraries.

Initialization Code

You can include initialization code, variables, and functions in the __init__.py file. This code is executed when the package is imported. It's a convenient place to perform setup tasks for the package.

Access to Submodules

The __init__.py file can also import and define attributes or submodules that are available when the package is imported. This can provide a more organized and clean interface for users of the package.

Example of a package directory structure:
my_package/ -- __init__.py -- module1.py -- module2.py
Content of my_package/__init__.py:
# This is an example of the __init__.py file in the "my_package" package. # Initialization code print("Initializing my_package...") # Importing submodules from . import module1 from . import module2

When you import the package using import my_package, the code in my_package/__init__.py will be executed, and the submodules module1 and module2 will be accessible as my_package.module1 and my_package.module2.


The __init__.py file is used to mark a directory as a Python package, define initialization code, and provide a way to organize and structure modules and submodules within the package.