我正在开发一个Python应用程序;它将所有代码放在一个包中,然后在这个内部运行。应用程序的Python包对解释器对用户不感兴趣,它只是一个GUI应用程序。
问题是,在应用程序包中导入模块时,首选哪种样式
from application import settings, utils
或
from . import settings, utils
那就是我可以指定名称(这里是'application')或者我可以用“。”来说“当前包”。
这是一个免费软件包,因此可能存在某人想要创建我的应用程序的分支并更改其名称的可能性。在这种情况下,替代方案1是轻微的麻烦。尽管如此,我仍然一直使用样式1(虽然早期代码在某些地方使用样式2),因为样式1看起来好多了。
我错过了我的风格(1)的争论吗?或者不选择风格2是愚蠢的吗?
答案 0 :(得分:10)
Python Style Guide建议明确禁止相对导入(.style):
非常不鼓励进行包裹内进口的相对进口。 始终对所有导入使用绝对包路径。 即使现在PEP 328 [7]完全在Python 2.5中实现, 其积极的相对进口风格受到积极劝阻; 绝对导入更具可移植性,通常更具可读性。
我倾向于同意。相对导入意味着在不同的文件中以不同的方式导入相同的模块,并且要求我记住我在阅读和写作时所看到的内容。不值得,可以使用sed
进行重命名。
除了重命名问题之外,绝对导入的唯一问题是import foo
可能意味着当前模块下的顶级模块foo
或子模块foo
。如果这是一个问题,您可以使用from __future__ import absolute_import
;这是Python 3中的标准。