我正在学习Python,感觉导入功能与Java有所不同。
我的代码层次结构如下:
./test.py
import pack
./pack/__init__.py
from . import submod
./pack/submod.py
from .anothersubmod import res
./pack/anothersubmod.py
res="something..."
test.py
如上运行。当我将submod.py
重写为:
from anothersubmod import res
Python给我一个错误,提示找不到anothersubmod
...
我猜submod
和anothersubmod
在同一个目录中,因此它们应以其模块(文件)名称相互引用,为什么我必须在anothersubmod
之前添加一个点?
答案 0 :(得分:1)
Java等效项是在任何地方显式引用pack
,例如:
import pack.anothersubmod.MyClass;
相当于Python的是:
from pack.anothersubmod import MyClass
那是正确的Python,实际上是首选样式。 Python还具有在import语句(from .
样式)中使用相对路径的能力,但是它们往往引起更多的混乱。
PEP 8建议在任何可能的地方都使用绝对导入:
建议绝对导入,因为如果导入系统配置不正确,它们通常更易读,并且往往表现得更好(或至少会提供更好的错误消息)。