import订单编码标准

PEP8build议:

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

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

您应该在每组导入之间留出一个空行。

有没有办法使用静态代码分析工具,如pylintpyflakespycheckerpep8来检查标准是否违反了包中的任何地方?


违规举例:

 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 

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

更新(2016): @sbywater有最近的答案。


find了! (不小心,在阅读“黑客指南”时)

OpenStack黑客风格检查项目名为黑客引入了几个独特的flake8扩展。 其中有hacking_import_groups (相关提交 )。

例:

  • 要求

    • TOX
    • flake8
    • 黑客 (来自主分支):

       $ git clone https://github.com/openstack-dev/hacking.git $ cd hacking/ $ python setup.py install 
  • 文件中使用的文件

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

       [hacking] local-check = hacking.core.hacking_import_groups 

      UPD:最新版本的hacking检查的path改变了,现在是hacking.checks.imports.hacking_import_groups

    • test.py (支票的目标)

       import requests import sys from my_module import print_smth print_smth(requests.get('https://google.com')) print_smth(sys.version) 
    • my_module.pytest.py使用的本地导入)

       def print_smth(smth): print smth 

然后,如果我对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进行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 $ 

希望这将有助于未来的人。

看看https://pypi.python.org/pypi/isort或https://github.com/timothycrosley/isort

isortparsing全局级别导入行的指定文件(在try / excepts块,函数等外部导入),并将它们全部放在按导入types分组在一起的文件顶部:

  • 未来
  • Python标准库
  • 第三方
  • 目前的Python项目
  • 显式地本地(。import之前,如:from。import x)

自定义单独部分(由configuration文件中的forced_separate列表定义)在每个部分的内部,导入按字母顺序sorting。 isort会自动删除重复的python导入,并将导入的长整数换成指定的行长度(默认为80)。

https://pypi.python.org/pypi/flake8-isort将此function插入到flake8中;

存在flake8插件: flake8-import-order 。

这个包增加了3个新的flake8警告

I100:您的import报表错误顺序。

I101:从导入的名称是错误的顺序。

I201:缺less部分或import之间的换行符。