I can't seem to get absolute imports to work in python. Here is my file structure:
a/
b/
__init__.py
__init__.py
foo.py
foo.py:
# Including or removing the __future__ import has no effect
from __future__ import absolute_import
from a import b # just `import b` works fine
print "success!"
I instead get:
ImportError: No module named a
What in the world is going on here? I feel like I'm missing something basic. While this example is trivial, I need absolute imports to work for the real project, so just replacing the import with a relative one is not an option. I'm using python 2.7.13
None of the solutions listed here help
Thanks in advance for any insight!
With your new skills, you can confidently import packages and modules from the Python standard library, third party packages, and your own local packages. Remember that you should generally opt for absolute imports over relative ones, unless the path is complex and would make the statement too long.
Absolute imports in PythonAbsolute import involves a full path i.e., from the project's root folder to the desired module. An absolute import state that the resource is to be imported using its full path from the project's root folder.
Good practice is to sort import modules in three groups - standard library imports, related third-party imports, and local imports.
Since it's not shown, I have to assume you're running python a/foo.py
, this puts the directory of the script ('a'
) on the beginning of sys.path
when in reality you want the current directory on the beginning of sys.path
.
You should instead run python -m a.foo
which will correctly initialize the sys.path
roots for your project structure.
Here's a more in-depth writeup that I wrote on other ways this same problem can go pearshaped.
Additionally I recorded a video on the topic: don't run python my/script.py
!
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