从同一目录中的模块导入模块时,为什么必须在模块前加点?

时间:2018-10-14 09:28:17

标签: python python-import

我正在学习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 ...

我猜submodanothersubmod在同一个目录中,因此它们应以其模块(文件)名称相互引用,为什么我必须在anothersubmod之前添加一个点?

1 个答案:

答案 0 :(得分:1)

Java等效项是在任何地方显式引用pack,例如:

import pack.anothersubmod.MyClass;

相当于Python的是:

from pack.anothersubmod import MyClass

那是正确的Python,实际上是首选样式。 Python还具有在import语句(from .样式)中使用相对路径的能力,但是它们往往引起更多的混乱。

PEP 8建议在任何可能的地方都使用绝对导入:

  

建议绝对导入,因为如果导入系统配置不正确,它们通常更易读,并且往往表现得更好(或至少会提供更好的错误消息)。