Absolute imports in python not working, relative i

2019-01-26 16:21发布

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!

1条回答
倾城 Initia
2楼-- · 2019-01-26 16:48

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.

查看更多
登录 后发表回答