我有以下包结构:
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:没有名为“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/