这是我的应用结构:
foodo/
setup.py
foodo/
__init__.py
foodo.py
models.py
foodo/foodo/foodo.py
从models.py
模块导入类:
from foodo.models import User
抛出ImportError
:
ImportError: No module named models
但是,如果我使用相对导入它会起作用:
from models import User
如果我在导入之前插入pdb断点并继续它也会有效。
我应该可以同时使用绝对和相对导入吗?
答案 0 :(得分:6)
foodoo
包中有本地模块foodoo
。在查找顶级名称之前,Python 2中的导入始终首先查找当前包中的名称。
重命名foodoo
包中的foodoo
模块(消除了首先找到本地foodoo
的可能性)或使用:
from __future__ import absolute_import
位于程序包模块的顶部以启用Python-3样式导入,其中顶级模块是唯一搜索的模块,除非您使用.
作为名称前缀以使名称相对。有关详细信息,请参阅PEP 328 -- Imports: Multi-Line and Absolute/Relative。