绝对导入不起作用,但相对导入起作用

Absolute Import Not Working, But Relative Import Does

这是我的应用程序结构:

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 断点并继续,它也可以工作。

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

您在 foodoo 包中有一个 local 模块 foodoo。在 Python 2 中导入总是先在当前包中查找名称,然后再查找顶级名称。

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

from __future__ import absolute_import

在包中模块的顶部以启用 Python-3 样式导入,其中顶级模块是唯一搜索的模块,除非您在名称前加上 . 以创建名亲。有关详细信息,请参阅 PEP 328 -- Imports: Multi-Line and Absolute/Relative