我已将我的导入问题简化为这个简单的基本案例。假设我有一个Python包:
mypkg/
__init__.py
a.py
b.py
a.py 包含以下内容:
def echo(msg):
return msg
b.py 包含以下内容:from mypkg import a # possibility 1, doesn't work
#import a # possibility 2, works
#from mypkg.a import echo # import also fails
print(a.echo())
运行
python b.py
在 Python 2.7.6 和 Python 3.3.5 中都会产生 ImportError: No module named mypkg
。我已经尝试在两种情况下添加 from __future__ import absolute_import
,但问题仍然存在。
期望的结果:
我希望可能性1能够正常工作。
为什么要这样做:
可能性2不是很理想。假设标准库引入了一个名为 a
的包(在这种情况下不太可能,但你懂的)。虽然 Python 2 会首先搜索当前包,但 Python 3+ 包括绝对导入更改,以便首先检查标准库。
无论出于何种原因,可能性1应该可以正常工作,不是吗?我敢肯定我之前已经做过成千上万次了。
注意:如果您编写一个外部脚本 mypkg
,from mypkg import a
就能正常工作。
我的问题类似于python - absolute import for module in the same directory,但作者暗示我所拥有的应该可以正常工作。