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

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

我应该能够同时使用绝对导入和相对导入吗?

最佳答案

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

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

from __future__ import absolute_import

在包中模块的顶部以启用 Python-3 样式导入,其中顶级模块是唯一搜索的模块,除非您在名称前加上 . 使名称相对。参见 PEP 328 -- Imports: Multi-Line and Absolute/Relative了解更多详情。

关于python - 绝对导入不起作用,但相对导入起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39068391/

相关文章:

python - Folium:将 GeoJson 添加到 map 时的颜色映射

python - pip 安装选项 "no-cache-dir"和 "target"不能很好地协同工作?

python - Pandas read_excel 返回 'not enough values to unpack (expected 2, got 1)'

python - 如何从git子模块导入python文件

python - 更改 matplotlib fiddle 图的颜色

python - 上下文正则表达式分割

python - 如何只打印文本 beautifulsoup

使用 subprocess 模块后 Python raw_input 不起作用

python - 使用来自另一个 csv 文件的列创建一个新的 csv 文件

Python 从子文件夹导入