Python 进口订单编码标准

Python 进口订单编码标准,python,python-import,static-analysis,pep8,Python,Python Import,Static Analysis,Pep8,建议: 导入应按以下顺序分组: 标准库导入 相关第三方进口 本地应用程序/库特定导入 您应该在每组导入之间放置一个空行 是否有一种方法可以使用静态代码分析工具(如pylint、pyflakes、pychecker、pep8)检查包中的任何地方是否违反了标准 违反的例子: from my_package import my_module from django.db import models import os 正确的导入方式: import os from django.db impor

建议:

导入应按以下顺序分组:

  • 标准库导入
  • 相关第三方进口
  • 本地应用程序/库特定导入
  • 您应该在每组导入之间放置一个空行

    是否有一种方法可以使用静态代码分析工具(如
    pylint
    pyflakes
    pychecker
    pep8
    )检查包中的任何地方是否违反了标准


    违反的例子:

    from my_package import my_module
    from django.db import models
    import os
    
    正确的导入方式:

    import os
    
    from django.db import models
    
    from my_package import my_module
    
    更新(2016):有最新的答案


    找到了!(在阅读《python黑客指南》时意外)

    名为OpenStack Hacking Style Checks的项目引入了几个独特的扩展。其中有一个(相关的)

    例如:

    • 要求

      • (来自总分行):

    • 示例中使用的文件

      • tox.ini
        (我们需要告诉flake8我们想要使用自定义检查)

        UPD:最新版本的
        hacking
        更改了检查路径,现在是
        hacking.checks.imports.hacking\u import\u group

      • test.py
        (检查目标)

      • my_module.py
        (本地导入由
        test.py
        使用)

    然后,如果我针对
    test.py
    运行
    flake8

    $ flake8 test.py
    test.py:2:1: H305  imports not grouped correctly (requests: third-party, sys: stdlib)
    test.py:3:1: H305  imports not grouped correctly (sys: stdlib, my_module.print_smth: project)
    test.py:3:1: H306  imports not in alphabetical order (sys, my_module.print_smth)
    
    然后,如果我按照
    PEP8
    的正确顺序对导入进行分组:

    import sys
    
    import requests
    
    from my_module import print_smth
    
    
    print_smth(requests.get('https://google.com'))
    print_smth(sys.version)
    
    未找到警告:

    $ flake8 test.py
    $
    
    希望这对将来的人有所帮助。

    看看或

    isort解析全局级别导入行的指定文件(在try/excepts块、函数等外部导入),并将它们全部放在文件顶部,按导入类型分组:

    • 未来
    • Python标准库
    • 第三方
    • 当前Python项目
    • 显式本地(.pre-import,如:from.import x)
    自定义独立部分(由配置文件中的强制分离列表定义) 在每个部分中,导入按字母顺序排序。isort会自动删除重复的python导入,并将导入中的long换行到指定的行长度(默认为80)


    将此功能插入flake8

    当前版本的pylint现在执行此操作,并将其报告为错误类C0411。

    A
    flake8
    插件存在:

    此程序包添加了3个新的flake8警告

    I100:您的导入语句顺序错误

    I101:您的from导入中的名称顺序错误

    I201:节或导入之间缺少换行符


    Flake8插件字母顺序检查导入排序顺序,设计用于使用黑色格式化程序。它遵循黑色格式化程序的方法,即使用单一样式,而不可能配置样式。字母顺序还检查
    \uuuu all\uuuu
    属性的顺序。

    pep8工具目前没有检查此项-它只检查一行上的多个导入(E401)@DNA很好,谢谢。希望外面有什么。可能会这样,但我不是100%确定。不过这要花很多钱。@Claudiu-Pycharm也有一个社区版本。如果你没有找到什么东西,你可以编写自己的pylint插件来帮你检查。请看一个插件示例。(这可能更适合作为评论,但我没有评论的名声。)你应该把赏金奖励给你自己:-)。顺便说一句,我可能会自己开始使用它。他们拿出了这张支票,说它太容易出错和困难:@jobevers谢谢你的更新!好的,我使用它没有任何问题:)请注意,如果运行
    isort script\u name.py——只检查
    ——它将只检查未排序的导入并打印结果——这就是我需要的。非常感谢您的选择。
    isort-rc--check--diff
    递归检查所有文件,只检查,显示一个diff。现在这应该是一个更高的投票结果了。对于不再显示错误号的较新版本,它是错误类
    错误的导入顺序
    def print_smth(smth):
        print smth
    
    $ flake8 test.py
    test.py:2:1: H305  imports not grouped correctly (requests: third-party, sys: stdlib)
    test.py:3:1: H305  imports not grouped correctly (sys: stdlib, my_module.print_smth: project)
    test.py:3:1: H306  imports not in alphabetical order (sys, my_module.print_smth)
    
    import sys
    
    import requests
    
    from my_module import print_smth
    
    
    print_smth(requests.get('https://google.com'))
    print_smth(sys.version)
    
    $ flake8 test.py
    $