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