包内的显式相对导入不使用关键字 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 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
你需要
from . import mymodule
和
from . import mylib
显式相对导入必须使用from
语法。设计意图是 import ...
或 from ... import ...
中 import
之后的任何内容都是有效的表达式来访问导入后的导入的东西,而 .mymodule
不是有效的表达式.
我有以下包结构:
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
你需要
from . import mymodule
和
from . import mylib
显式相对导入必须使用from
语法。设计意图是 import ...
或 from ... import ...
中 import
之后的任何内容都是有效的表达式来访问导入后的导入的东西,而 .mymodule
不是有效的表达式.