代码之家  ›  专栏  ›  技术社区  ›  u0b34a0f6ae

我应该使用“from package import utils,settings”还是“from”。导入实用程序,设置“

  •  4
  • u0b34a0f6ae  · 技术社区  · 17 年前

    我正在开发一个python应用程序;它的所有代码都在一个包中,当然也在这个包中运行。从解释器到用户,应用程序的python包是不感兴趣的,它只是一个GUI应用程序。

    问题是,在应用程序包中导入模块时,首选哪种样式

    from application import settings, utils
    

    或

    from . import settings, utils
    

    也就是说,我既可以按原样指定名称(这里是“应用程序”),也可以使用“当前包”。

    这是一个免费的软件包,因此有可能有人想把我的应用程序做成一个分叉并更改它的名称。在这种情况下,备选方案1是一个小麻烦。不过,我一直使用样式1(尽管早期代码在某些地方使用样式2),因为样式1看起来好多了。

    我的风格(1)是否有我遗漏的论点?或者不采用第二种风格是愚蠢的?

    1 回复  |  直到 17 年前
        1
  •  10
  •   Scott Dorman    17 年前

    这个 Python Style Guide 明确建议不要使用相对导入。风格:

    对于包内进口的相对进口非常不鼓励。 始终对所有导入使用绝对包路径。 即使现在Pep328[7]已经在python 2.5中完全实现了, 其明确的相对进口方式受到了积极的阻碍; 绝对导入更易于移植,而且通常更可读。

    我倾向于同意。相对导入意味着相同的模块以不同的方式导入到不同的文件中,并且要求我记住在读和写时看到的内容。不太值得,可以用 sed .

    除了更名问题,绝对进口的唯一问题是 import foo 可能意味着顶级模块 foo 或子模块 福 在当前模块下面。如果这是一个问题,您可以使用 from __future__ import absolute_import ;这是Python3中的标准配置。