绝对导入不起作用,但相对导入确实如此

时间:2016-08-21 20:06:25

标签: python python-2.7 python-import importerror

这是我的应用结构:

foodo/
    setup.py
    foodo/
        __init__.py
        foodo.py
        models.py

foodo/foodo/foodo.pymodels.py模块导入类:

from foodo.models import User

抛出ImportError

ImportError: No module named models

但是,如果我使用相对导入它会起作用:

from models import User

如果我在导入之前插入pdb断点并继续它也会有效。

我应该可以同时使用绝对和相对导入吗?

1 个答案:

答案 0 :(得分:6)

foodoo包中有本地模块foodoo。在查找顶级名称之前,Python 2中的导入始终首先查找当前包中的名称。

重命名foodoo包中的foodoo模块(消除了首先找到本地foodoo的可能性)或使用:

from __future__ import absolute_import

位于程序包模块的顶部以启用Python-3样式导入,其中顶级模块是唯一搜索的模块,除非您使用.作为名称前缀以使名称相对。有关详细信息,请参阅PEP 328 -- Imports: Multi-Line and Absolute/Relative