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

Explicit relative imports within a package not using the keyword from

我有以下包结构:

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: No module named 'mymodule'ModuleNotFoundError: No module named '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 不是有效的表达式.