我的包装结构如下:
mypkg
├── mymodule
│ ├── __init__.py
│ └── ...
├── mylib.py
└── script.py
在script.py
中,我可以做from .mymodule import X
和from .mylib import Y
,并且对于Python 2和Python 3都可以正常工作。
在Python 2中,我可以执行import mymodule
和import mylib
,并且工作正常,然后可以执行mymodule.X
或mylib.Y
。
在Python 3中,我无法执行import .mymodule
或import .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
答案 0 :(得分:1)
您需要
from . import mymodule
和
from . import mylib
显式相对导入必须使用from
语法。设计意图是,import
或import ...
中from ... import ...
之后的任何内容都是在导入后访问已导入内容的有效表达式,而.mymodule
不是有效表达式