python作为一门动态的编程语言,有开发便捷的优势,但容易犯代码风格上的问题。本文旨在介绍一些让python代码规范的工具和实际运用场景。
工具推荐
用flake8进行代码静态扫描
flake8是一个强制的代码规范工具,flake8支持python2、python3的代码静态扫描,但flake8本身依赖python3.5以上的版本。
flake8已插件的形式添加检测规则,能够支持自定义的规则的扩展。
flake8自带的插件有mccabe(代码负责度)pycodestyle(PEP8代码检查), pyflakes(python语法问题,单不检查代码样式)。此外还推荐3个插件:
flake8-print: 检测代码里的print https://github.com/JBKahn/flake8-print
flake8-bugbear: 增加了除pycodestyle和pyflakes之外的检查 https://github.com/PyCQA/flake8-bugbear
flake8-mypy:对代码进行type hints相关对检查 https://github.com/ambv/flake8-mypy
安装命令:pip3 install -i http://mirrors.aliyun.com/pypi/simple/
--trusted-host mirrors.aliyun.com
flake8 flake8-bugbear flake8-print flake8-mypy
用black进行代码格式化
black是一个不妥协的Python代码格式化工具,能够将代码自动按照PEP8的规范进行格式化。
安装命令:pip3 install black
持续集成中的运用
git hook 中使用插件
建议将在pre-commit中添加 black 和 flake8 的命令进行commit之前的检查.
hooks在 ./.git/hooks/路径下,添加pre-commit文件,在里面写需要在commit之前执行的命令。例如将本次提交的代码进行用代码格式化并且进行静态扫描,pre-commit定义如下:
#!/bin/bash
# 获取本次提交的变动的文件
STAGE_FILES=$(git diff --cached --name-only --diff-filter=ACM -- '*.py' '*.js')
# black格式化代码
python3. 6 -m black $STAGE_FILES
# flake8代码静态扫描
python3.6 -m flake8 $STAGE_FILES
将代码检查加入到gitlab CI(持续集成)中
1.在项目中代码中的添加 gitlab-ci.yml 语法参考 https://docs.gitlab.com/ee/ci/yaml/README.html
2.为项目配置ci-runner,推荐时候用docker进行安装ci-runner, 参考《搭建自己的 Gitlab CI Runner》
每次push代码的时候都会触发一次build,根据gitalb-ci.yml中定义的步骤在runner中执行命令。例如在ci过程中加入代码静态扫描, .gitlab-ci.yml如下:
# .gitlab-ci.yml
image: "python:3.6"
before_script:
- python --version
- pip install
-i http://mirrors.aliyun.com/pypi/simple/
--trusted-host mirrors.aliyun.com
flake8 flake8-bugbear flake8-mypy flask
stages:
- Static Analysis
flake8:
stage: Static Analysis
script:
- flake8 --ignore=E501 --max-line-length=120