PEP-420 is explaining the differences between regular packages and namespace packages: https://www.python.org/dev/peps/pep-0420/
my
├── package
│ ├── some_module.py
│ └── __init__.py
>>> import importlib
>>> import os
>>> print(os.path.exists('my/package/__init__.py'))
True
>>> m = importlib.import_module('my.package')
>>> print(m.__path__)
['my/package']
my
├── package
│ └── some_module.py
>>> import importlib
>>> import os
>>> print(os.path.exists('my/package/__init__.py'))
False
>>> m = importlib.import_module('my.package')
>>> print(m.__path__)
['my/package']
my
├── package
│ ├── some_module.py
│ └── __init__.py
>>> import importlib
>>> import os
>>> print(os.path.exists('my/package/__init__.py'))
True
>>> m = importlib.import_module('my.package')
>>> print(m.__path__)
['/Users/elbaschid/my/package']
my
├── package
│ └── some_module.py
>>> import importlib
>>> import os
>>> print(os.path.exists('my/package/__init__.py'))
False
>>> m = importlib.import_module('my.package')
>>> print(m.__path__)
_NamespacePath(['/Users/elbaschid/my/package'])