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

时间:2018-12-10 21:49:13

标签: 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: No module named 'mymodule'ModuleNotFoundError: No module named 'mylib'

阅读此question后,我了解到我需要前导点,但是为什么会出现语法错误?如何使这些导入同时适用于Python 2和3?

更新: 为了将来参考,我的软件包结构现在是:

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

1 个答案:

答案 0 :(得分:1)

您需要

from . import mymodule

from . import mylib

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