What is __init__.py for?
__init__.py is a special Python file that is used to indicate that the directory it is present in is a Python package. It can contain initialization code for the package, or it can be an empty file.
Packages are a way to structure Python's module namespace by using "dotted module names". For example, the module name A.B designates a submodule named B in a package named A.
You might have a directory structure like this:
mypkg/
__init__.py
module1.py
module2.py
subpkg/
__init__.py
submodule1.py
submodule2.py
Here, mypkg is a package that contains two modules: module1 and module2. It also contains a subpackage, subpkg, which itself contains two modules: submodule1 and submodule2.
You can then import these modules and submodules using the dotted notation:
import mypkg.module1
import mypkg.subpkg.submodule1The __init__.py file can contain code to initialize the package when it is imported, for example by loading data or setting up logging. It can also be left empty.
# __init__.py
import logging
logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)
log.info('Initializing mypkg')This __init__.py file will run when you import mypkg, setting up the package's logger.
import mypkg
# This will log 'Initializing mypkg'