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!
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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!
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0