导入订单编码标准

ale*_*cxe 78 python static-analysis pep8 python-import

PEP8表明:

应按以下顺序对导入进行分组:

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

您应该在每组导入之间添加一个空行.

有没有一种方法来检查,如果该标准在使用静态代码分析工具包违反任何地方,比如pylint,pyflakes,pychecker,pep8?


违规示例:

from my_package import my_module
from django.db import models
import os
Run Code Online (Sandbox Code Playgroud)

正确的导入方式:

import os

from django.db import models

from my_package import my_module
Run Code Online (Sandbox Code Playgroud)

小智 62

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

  • 这应该是一个更高投票的答案.对于不再显示错误号的更新版本,它是错误类`wrong-import-order`. (7认同)

ale*_*cxe 54

更新(2016年):@ sbywater有最新答案.


找到了!(不小心,在阅读"黑客蟒蛇指南"时)

名为hacking的OpenStack Hacking Style Checks项目引入了几个独特的flake8扩展.其中有hacking_import_groups(相关提交).

例:

然后,如果我flake8反对test.py:

$ 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)
Run Code Online (Sandbox Code Playgroud)

然后,如果我按正确的顺序对导入进行分组PEP8:

import sys

import requests

from my_module import print_smth


print_smth(requests.get('https://google.com'))
print_smth(sys.version)
Run Code Online (Sandbox Code Playgroud)

没有发现警告:

$ flake8 test.py
$
Run Code Online (Sandbox Code Playgroud)

希望这将有助于将来的某些人.

  • 他们拿出这张支票,理由是它太容易出错并且很难:https://github.com/openstack-dev/hacking/commit/8f1fcbdb9aa4fc61349e5e879153c722195b1233#diff-d941f383e7dafcdea3d0ff128d92b497L500 (2认同)

cle*_*der 25

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

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

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

自定义单独的部分(由配置文件中的forced_separate列表定义)在每个部分的内部,导入按字母顺序排序.isort自动删除重复的python导入,并将导入包装到指定的行长度(默认为80).

https://pypi.python.org/pypi/flake8-isort将此功能插入flake8

  • 请注意,如果您运行`isort script_name.py --check-only` - 它只会检查未排序的导入并打印出结果 - 这就是我需要的.非常感谢你的选择. (2认同)

pho*_*nix 6

flake8存在一个插件:flake8-import-order.

此软件包添加了3个新的flake8警告

I100:您的import语句顺序错误.

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

I201:缺少部分或导入之间的换行符.