python中的绝对导入不起作用,相对导入起作用
Posted
技术标签:
【中文标题】python中的绝对导入不起作用,相对导入起作用【英文标题】:Absolute imports in python not working, relative imports work 【发布时间】:2018-01-08 22:22:16 【问题描述】:我似乎无法让绝对导入在 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
没有列出here帮助的解决方案
提前感谢您的任何见解!
【问题讨论】:
foo.py
是否在 a
目录中?您在图表中将其显示为外部。
我的错,谢谢你的收获
听起来你犯了一个常见的错误,即直接运行包的子模块而不是作为子模块。这里有一个骗子——真的有很多骗子,但我认为至少有一个好人。
你能详细说明一下吗?我仍然对问题所在感到有些困惑。
我不确定,但也许@user2357112 说你应该写下import a.b
,因为b
是a
的子模块
【参考方案1】:
由于未显示,我必须假设您正在运行 python a/foo.py
,这会将脚本的目录 ('a'
) 放在 sys.path
的开头,而实际上您希望当前目录位于开头sys.path
.
您应该改为运行 python -m a.foo
,这将为您的项目结构正确初始化 sys.path
根。
这是我写的a more in-depth writeup,以其他方式解决同样的问题。
【讨论】:
谢谢!这是我正在寻找的解决方案/解释。该链接也非常有用。以上是关于python中的绝对导入不起作用,相对导入起作用的主要内容,如果未能解决你的问题,请参考以下文章