For this directory hierarchy:
.
├── hello
│ ├── __init__.py
│ └── world
│ └── __init__.py
└── test.py
And the Python source files:
if __name__ == '__main__':
import hello
import world
print("yes you win")
Running test.py with Python 3.4 throws ImportError saying that module world is not found, but with Python 2.7 everything is fine.
I know that sys.path is referenced when searching for the imported modules, so adding the directory hello to sys.path eliminates the error.
But in Python 2.7, before importing world, the directory hello is not in sys.path either. What causes this difference? Is there any recursive searching policy applied in Python 2.7?
Python 3 uses absolute imports (see PEP 328 as @user2357112 points out). The short of it is that Python 3 searches from the root of each sys.path entry, rather than first consulting the module's directory as if it were a prepended entry in sys.path.
To get the behavior you want you can either:
from . import world in the hello packageimport hello.world
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With