我有以下包结构:
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'
。
阅读此问题后,我知道我需要前导点,但是为什么会出现语法错误?如何使这些导入同时适用于Python 2和3?
更新:为了将来参考,我的软件包结构现在是:
mypkg
├── __init__.py
├── mymodule
│ ├── __init__.py
│ └── ...
├── mylib.py
└── script.py
你需要
from . import mymodule
和
from . import mylib
显式相对导入必须使用from
语法。设计意图是在import
in之后出现的任何内容,import ...
或者from ... import ...
是在导入之后访问已导入事物.mymodule
的有效表达式,而不是有效表达式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句