我正在更改一堆旧的python代码,这些代码偶尔会在包之间遇到名称冲突。我有一个问题是什么时候应该使用绝对导入,以及只按名称导入同一级别的模块是否合适。
/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py
包中的每个import语句是否都像:
import package.subX.moduleX
或者
from package.subX import moduleX
在子包__init__.py
文件中呢。简单地说
import moduleA
import moduleB
或者,在/package/subA/moduleA.py中,简单地说:
import moduleB
事实证明,相对进口是一个非常糟糕的主意,尽管长期以来它们都是默认行为。你可以在这个网站上找到很多问题,有人只是用一个内置模块命名他们的文件,然后用奇怪的错误消息破坏他们的应用程序。
这就是为什么通过在任何地方(包括包)引用项目来执行绝对导入总是一件好事。
简而言之,使用这种风格:
引自PEP8:
相关问题 更多 >
编程相关推荐