Many people are willing to omit __init__.py
from Python 3.3, but ** don't. ** **
Starting with Python 3.3, the Implicit namespace package has been added in PEP 420.
** Namespace packages are not ordinary packages. ** It's a special purpose, and for most people ** you don't even need to know **.
If you really want to know, read PEP 420 above and the packaging guide.
__init__.py
Abusing the Implicit namespace package with a regular package is harmful.
Since it is different from a normal package, import may be slow to find modules in the package. Also, although the probability is low, there may be some problems due to the difference in the search order.
For example, the standard library unittest's ability to automatically search for test modules does not search in directories that do not have __init__.py
. (See https://bugs.python.org/issue29642)
** If you try to do this, you will have to recursively search all directories that do not have __init__.py
. That directory is node_modules and may contain hundreds of thousands of files and directories. How slow would it be if the directory were network mounted? ** **
Such slowdowns are simply unacceptable for users who abuse the Implicit namespace package as a regular package **. ** **
For the same reason, don't expect tools like lint to have the ability to automatically search for packages and modules to look for Implicit namespace packages.
There may be tools that accept and respond to requests without knowing the background, but do not send issues or pull requests that say "should respond" or "respond" because it is annoying to maintainers and other users. ..