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!
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
!