小编典典

对 Python `import x` 和 `from x import y` 语句进行排序的正确方法是什么?

all

python 风格指南建议像这样对导入进行分组:

进口应按以下顺序分组:

  1. 标准库导入
  2. 相关第三方进口
  3. 本地应用程序/库特定导入

但是,它没有提及应如何布置两种不同的导入方式:

from foo import bar
import foo

有多种方法可以对它们进行排序(假设所有这些导入都属于同一个组):

  • 首先from..import,然后import

    from g import gg
    

    from x import xx
    import abc
    import def
    import x

  • 首先import,然后from..import

    import abc
    

    import def
    import x
    from g import gg
    from x import xx

  • 按模块名称的字母顺序,忽略导入的类型

    import abc
    

    import def
    from g import gg
    import x
    from xx import xx

PEP8 没有提及此功能的首选顺序,并且某些 IDE 可能只是执行该功能的开发人员喜欢的任何“清理导入”功能。

我正在寻找另一个 PEP 澄清这一点或来自
BDFL
(或另一个 Python
核心开发人员)的相关评论/电子邮件。 请不要发布主观的答案,说明您自己的偏好。


阅读 82

收藏
2022-06-11

共1个答案

小编典典

导入通常按字母顺序排序,并在 PEP 8 之外的各个地方进行描述。

按字母顺序排列的模块更易于阅读和搜索 。毕竟,Python 是关于可读性的。此外,更容易验证是否已导入某些内容,并避免重复导入。

PEP 8 中没有关于排序的任何内容。所以这一切都是关于选择你使用的东西。

根据来自知名网站和存储库的少量参考资料,也很受欢迎,按字母顺序排列是一种方式。

例如像这样:

import httplib
import logging
import random
import StringIO
import time
import unittest
from nova.api import openstack
from nova.auth import users
from nova.endpoint import cloud

或者

import a_standard
import b_standard

import a_third_party
import b_third_party

from a_soc import f
from a_soc import g
from b_soc import d

Reddit 官方存储库还指出,通常应使用 PEP-8 导入排序。但是,还有一些补充,即对于每个导入的组,导入的顺序应该是:

import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order

参考:

PS:isort 实用程序会自动对您的导入进行排序。

2022-06-11