python中的绝对导入不起作用,相对导入起作用

python中的绝对导入不起作用,相对导入起作用,python,python-2.7,python-import,importerror,Python,Python 2.7,Python Import,Importerror,我似乎无法让绝对导入在python中工作。以下是我的文件结构: 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!"

我似乎无法让绝对导入在python中工作。以下是我的文件结构:

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!"
我反而得到:

ImportError: No module named a
这到底是怎么回事?我觉得我错过了一些基本的东西。虽然这个例子很简单,但我需要绝对导入来为实际项目工作,因此仅用相对导入替换导入是不可取的。我正在使用python 2.7.13

列出的解决方案都没有帮助


提前感谢您的任何见解

因为它没有显示,我不得不假设您正在运行
pythona/foo.py
,这将脚本的目录(
'a'
)放在
sys.path
的开头,而实际上您希望当前目录放在
sys.path
的开头

您应该运行
python-ma.foo
,它将正确初始化项目结构的
sys.path


这是我在其他方面写的,同样的问题也可以解决。

foo.py
a
目录中吗?您将它显示为图表中的外部。糟糕,谢谢您的提示。听起来您犯了一个常见的错误,即直接运行包的子模块而不是作为子模块运行。这附近有个骗局,真的有很多骗局,但我认为至少有一个好的骗局。你能详细说明一下吗?我仍然有点困惑到底是什么问题。我不确定,但也许@user2357112说的是你应该写下
import a.b
,因为
b
a
的子模块,谢谢!这就是我一直在寻找的解决方案/解释。这个链接也非常有用。