我应该使用"from package import utils,settings"或"from.import utils,settings"

u0b*_*6ae 4 python

我正在开发一个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的标准.