Flake8包装了下列工具:
- PyFlakes:静态检查Python代码逻辑错误的工具。
- pep8: 静态检查PEP 8编码风格的工具。
- Ned Batchelder’s McCabe script:静态分析Python代码复杂度的工具。
它综合上述三者的功能,在简化操作的同时,还提供了扩展开发接口。
安装
这里仅介绍Ubuntu的安装方法,其他安装方法见Flake8官网。
- 添加ppa:cjohnston/flake8。Ubuntu 12.04、12.10和13.04官方源仅提供pep8的包,而该PPA不仅提供了最新的python-flake8包,还提供最新的pep8包。Ubuntu 13.10和14.04默认已经提供最新的pep8和python-flake8,所以可以跳过这一步。
1 2 3 |
|
- 安装python-flake8
1
|
|
使用
- 递归检查当前目录的所有Python文件:
1
|
|
- 检查指定文件
1
|
|
- 通过setup.py检查工程的所有Python文件:
1
|
|
为了保证其在其他环境中正确运行,需要将flake8增加到setup_requires中,例如:
1 2 3 4 5 6 7 8 |
|
- 由于默认禁用代码条件复杂度检查,需要通过–max-complexity激活该功能:
1
|
|
该功能对于发现代码过度复杂非常有用,根据Thomas J. McCabe, Sr(Cyclomatic complexity的创造者)研究,代码复杂度不宜超过10,而Flake8官网建议值为12。
配置
- 用户相关的配置存在~/.config/flake8中,如:
1 2 |
|
个人感觉除了代码复杂度因子(max-complexity)外,其他参数的默认值已经很好,基本不需要再作配置。
- 工程相关的设置,可以存放在工程顶级目录的tox.ini或setup.cfg,格式与用户相关的配置一致。
与Git整合
在.git/hooks目录中,创建Git的pre-commit钩子脚本,Flake8可以对每次提交的代码进行检查。该脚本如下:
1 2 3 4 5 6 7 8 9 10 |
|
若strict为True,任何warning都将阻挡提交。否则(或缺省),warning仅会被打印到标准输出。
与vim整合
这里仅介绍vim插件vim-flake8的安装和配置
- 安装vim插件pathogen:
1 2 3 |
|
- 添加下列配置至~/.vimrc中:
1 2 3 |
|
- 安装vim-flake8:
1 2 |
|
至此,当vim打开Python源码后,按F7就会执行Flake8对当前文件进行检查。
插件
Flake8相比pep8的优势在于其良好的扩展性,pep8 1.4.6尚未支持命名规范的检查,却已有人开发Flake8的插件pep8-naming来弥补这个缺陷。
pep8-naming处于早期开发阶段,尚无人为其制作deb包。我花时间做了deb包,并上传到我的ppa:likemartinma/python上。通过下述步骤可以轻松安装它:
1 2 3 4 |
|
由于Python部分核心库的函数命令存在“历史遗留”问题,与PEP 8并不保持完全一致,如xml.parsers.expat.xmlparser.StartElementHandler,这给pep8-naming带来一定的误报困扰。
解决的办法是这样的代码行追加 # noqa 的注释,从避免flake8发出类似warning。
存在的问题
由于pep8尚未支持docstring规范的检查,也没有相关Flake8的插件。目前仅能用pep257来完成docstring规范的检查。期待pep257早日衍生成Flake8的插件。