python - 包内显式相对导入不使用关键字 from

标签 python python-3.x python-import

我有以下包结构:

mypkg
├── mymodule
│   ├── __init__.py
│   └── ...
├── mylib.py
└── script.py

script.py 中,我可以执行 from .mymodule import Xfrom .mylib import Y 并且适用于 Python 2 和Python 3。

在 Python 2 中,我可以执行 import mymoduleimport mylib 并且它工作正常,然后我可以执行 mymodule.Xmylib.Y.

在Python 3中,我无法执行import .mymoduleimport .mylib(语法错误),如果我删除前导点,我会得到:ModuleNotFoundError:没有名为“mymodule”的模块ModuleNotFoundError:没有名为“mylib”的模块

读完这篇文章后question我知道我需要前导点,但为什么我会收到语法错误?如何让这些导入同时适用于 Python 2 和 3?

更新: 为了将来引用,我现在的包结构是:

mypkg
├── __init__.py
├── mymodule
│   ├── __init__.py
│   └── ...
├── mylib.py
└── script.py

最佳答案

你需要

from . import mymodule

from . import mylib

显式相对导入必须使用from语法。设计意图是,import ...from ... import ... 中的 import 之后的任何内容都是有效的表达式导入后访问导入的东西,.mymodule 不是有效的表达式。

关于python - 包内显式相对导入不使用关键字 from,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714173/

相关文章:

python-3.x - Flask 和 Nose 的相对导入与绝对导入

python-3.x - python 3.7.0 mypy 0.641 使用 UserList 扩展 pythons 的列表?

python - 从另一个非子文件夹导入 python 文件

python - OpenStack中子带宽限制方法

python - 计算 pandas 中另一列上的连续日期列与 groupby 之间的差异?

python - 属性错误: 'AnonymousUserMixin' object has no attribute 'can'

python - 在 Python 3.5.2 中导入 *asyncio* 会因 *Full* 被隐藏而导致 ImportError

python - Python 中视频帧的遮光区域

python - 如何使我的类在 Python 中可打印?

python-2.7 - 导入错误 : No module named google. 云