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

LaS*_*ell 4 python python-import importerror python-2.7

这是我的app结构:

foodo/
    setup.py
    foodo/
        __init__.py
        foodo.py
        models.py
Run Code Online (Sandbox Code Playgroud)

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

from foodo.models import User
Run Code Online (Sandbox Code Playgroud)

抛出一个ImportError:

ImportError: No module named models
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用相对导入它确实有效:

from models import User
Run Code Online (Sandbox Code Playgroud)

如果我在导入之前输入pdb断点并继续,它也可以工作.

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

Mar*_*ers 6

您在包中有一个本地模块.在查找顶级名称之前,Python 2中的导入始终首先在当前包中查找名称.foodoofoodoo

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

from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)

在软件包顶部的模块中启用Python-3样式导入,其中顶级模块是唯一搜索的模块,除非您在名称前加上.以使名称相对.有关详细信息,请参阅PEP 328 - 导入:多行和绝对/相对.