什么是正确的方式来sortingPython的`importX`和`从XimportY`语句?

python风格指南build议像这样分组导入:

import应按以下顺序进行分组:

  1. 标准库导入
  2. 有关的第三方import
  3. 本地应用程序/库特定的导入

但是,它并没有提到两种不同的import方式:

from foo import bar import foo 

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

  • 先从from..import import ,然后import

     from g import gg from x import xx import abc import def import x 
  • import ,然后从from..import 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没有提到这个优先顺序,而“清理导入”function有些IDE可能只是做了那个function的开发者所喜欢的。

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

import通常按字母顺序排列,并在PEP 8旁边的不同位置进行描述。

按字母顺序sorting的模块更快速阅读和search 。 毕竟Python是关于可读性的。 另外,更容易validation是否导入了某些内容,并避免重复导入

在PEP 8中没有关于sorting的东西。所有关于select你使用的东西。

根据信誉良好的网站和知识库也很less受欢迎的参考,字母顺序是方式。

例如像这样:

 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-8import顺序。 但是有一些补充是

 for each imported group the order of imports should be: import <package>.<module> style lines in alphabetical order from <package>.<module> import <symbol> style in alphabetical order 

参考文献:

PS: isort工具会自动对您的导入进行sorting。

PEP 8确实没有提到这一点。 这一点没有任何约定,并不意味着Python社区需要绝对定义一个。 一个项目的select可能会更好,但对另一个项目来说最糟糕的是…这是一个偏好的问题,因为每个解决scheme都有其优点和缺点。 但是,如果你想遵循惯例,你必须尊重你引用的主要命令:

  1. 标准库导入
  2. 有关的第三方import
  3. 本地应用程序/库特定的导入

例如, Googlebuild议在这个页面中按照字典顺序对每个类别(标准/第三方/你的) 进行sorting 。 但在Facebook,雅虎等等,这可能是另一个公约…

根据中央情报局的内部编码惯例( WikiLeaks Vault 7漏洞的一部分 ),python的input应该分为三组:

  1. 标准库导入
  2. 第三方import
  3. 应用程序特定的导入

import应该在这些群体中按字母顺序排列,忽略情况:

 import foo from foo import bar from foo.bar import baz from foo.bar import Quux from Foob import ar