python中的绝对导入不起作用,相对导入起作用
我似乎无法让绝对导入在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!"
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
的子模块,谢谢!这就是我一直在寻找的解决方案/解释。这个链接也非常有用。