Question:
In Python 3.3 , is it still necessary to have an __init__.py file when importing packages?
Answer:
Not necessarily. Python 3.3 introduced the concept of "Implicit Namespace Packages," allowing packages to be created without an __init__.py file. These are known as namespace packages, in contrast to regular packages that do have an __init__.py file.
Implicit Namespace Package Use Case:
Namespace packages are specifically used when multiple libraries reside in different locations and need to contribute a subpackage to the same parent package. For example, consider the following structure:
google_pubsub/ # Package 1 google/ # Namespace package cloud/ # Namespace package pubsub/ # Regular package __init__.py foo.py google_storage/ # Package 2 google/ # Namespace package cloud/ # Namespace package storage/ # Regular package __init__.py bar.py
Without namespace packages, importing both "google_pubsub" and "google_storage" would fail because Python treats regular packages as self-contained entities. By removing the __init__.py files from the "google" and "google/cloud" directories, they are interpreted as namespace packages, allowing the Python interpreter to find and contribute modules and subpackages to the "google" package.
Regular vs. Namespace Packages:
In most cases, it's recommended to stick with regular packages by using empty __init__.py files. This is because:
Conclusion:
While namespace packages can be useful in specific scenarios, they should be used sparingly. For most developers and use cases, regular packages with __init__.py files are the recommended approach. Consider namespace packages only when there is a genuine need for sharing namespaces between multiple directories containing subpackages.
References:
The above is the detailed content of Do I Need `__init__.py` Files for Packages in Python 3.3 ?. For more information, please follow other related articles on the PHP Chinese website!