ale*_*cxe 78 python static-analysis pep8 python-import
PEP8表明:
应按以下顺序对导入进行分组:
- 标准库导入
- 相关的第三方进口
- 本地应用程序/库特定导入
您应该在每组导入之间添加一个空行.
有没有一种方法来检查,如果该标准在使用静态代码分析工具包违反任何地方,比如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.
ale*_*cxe 54
更新(2016年):@ sbywater有最新答案.
找到了!(不小心,在阅读"黑客蟒蛇指南"时)
名为hacking的OpenStack Hacking Style Checks项目引入了几个独特的flake8扩展.其中有hacking_import_groups(相关提交).
例:
要求
黑客攻击(来自主分支):
$ git clone https://github.com/openstack-dev/hacking.git
$ cd hacking/
$ python setup.py install
Run Code Online (Sandbox Code Playgroud)示例中使用的文件
tox.ini (我们需要告诉flake8我们要使用自定义检查)
[hacking]
local-check = hacking.core.hacking_import_groups
Run Code Online (Sandbox Code Playgroud)
UPD:hacking检查路径的最新版本已更改,现在是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)
Run Code Online (Sandbox Code Playgroud)my_module.py(使用本地导入test.py)
def print_smth(smth):
print smth
Run Code Online (Sandbox Code Playgroud)然后,如果我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)
希望这将有助于将来的某些人.
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
flake8存在一个插件:flake8-import-order.
此软件包添加了3个新的flake8警告
I100:您的import语句顺序错误.
I101:您导入的名称顺序错误.
I201:缺少部分或导入之间的换行符.