我应该使用“ from package import utils,settings”还是“ from”?导入工具,设置”
问题内容:
我正在开发Python应用程序;它的所有代码都放在一个软件包中,并且可以在其中运行。从解释器到用户,该应用程序的Python包都没有用,它只是一个GUI应用程序。
问题是,在应用程序包内导入模块时首选哪种样式
from application import settings, utils
要么
from . import settings, utils
也就是说,我可以按原样指定名称(此处为“应用程序”),也可以使用“”来表示“当前程序包”。
这是一个免费软件包,因此可能有人想要创建我的应用程序的分支并更改其名称。在这种情况下,替代方案1会带来一点麻烦。尽管如此,我还是一直使用样式1(尽管早期代码在某些地方使用样式2),因为样式1看起来要好得多。
我错过了关于我的风格(1)的任何争论吗?还是不选择样式2是愚蠢的?
问题答案:
在Python的风格指南建议明确对相对进口(风格):
强烈建议不要将相对进口用于包装内进口。始终对所有导入使用绝对包路径。即使现在PEP 328 [7]已在Python
2.5中完全实现,仍不鼓励使用其显式相对导入的样式。绝对导入更具可移植性,通常更具可读性。
我倾向于同意。相对导入意味着同一模块以不同的方式导入到不同的文件中,并且要求我记住我在读取和写入时要看的内容。确实不值得,可以使用进行重命名sed
。
除了重命名问题,绝对导入的唯一问题是import foo
可能意味着顶层模块foo
或foo
当前模块下的子模块。如果有问题,可以使用from __future__ import absolute_import
; 这是Python 3中的标准。