在软件开发中,代码质量是至关重要的。为了保证Python代码的质量,开发人员需要使用一些优秀的代码检查工具。
下面是几个常用的Python代码检查工具:
Pylint
:是一个流行的Python代码检查工具,用于检查代码语法、风格和代码错误等问题Pylint提供了丰富的插件和配置选项,方便开发人员根据项目要求进行定制和管理。Flake8
:是一个由Pint、Pyflakes和pep8三个库组成的Python代码检查工具,它可以检查语法错误、代码风格和各种代码错误等问题。Flake8具有高度的可配置性和易用性,是很多Python开发人员的首选。Pyflakes
: 是Python代码静态分析工具,用于检测Python代码中的语法错误和中未使用的变量和模块的问题,它也可以检查Python模块的导入语句的正确性。mypy
:一个类型注释检查器,用于检查Python代码的类型注释,以保代码中的注释与实际使用的变量和函数相匹配。
以上是几个常用的Python代码检查工具,它们帮助开发人员快速发现和复代码中的错误和漏洞,提高代码质量和可靠性。
但是最近又发现了一款开源的Python代码检查工具,相比 Pylint
、Flake8
检查更迅速,兼容性更强。它名为 Ruff,GitHub Star 已达 21K。
Ruff 简介
Ruff
是一个基于 Python 的代码检查工具,它可以帮助我们在编写Python代码时发现潜在的问题并提供修复建议。
GitHub: https://github.com/astral-sh/ruff
该项目采用 Rust
编写,比 Python 的 Flake8 和 Black 快 10-100 倍,支持通过 pip 安装、内置 700+ 规则、兼容 Python 3.12、自动纠错等功能。
凡是能用 Rust 重写开发的工具,结果就突出一个字“快”。这也是它为什么快的主要原因。
Ruff
利用 Rust Python 的 AST 解析器
,实现自己的 AST 遍历、visitor 抽象和 lint 规则逻辑。它目标是比其他工具快几个数量级,同时提供代码检查、autofix等一站式的解决方案。
Ruff 可以用来替换flake8(加上各种插件)、isort、pydocstyle、yesqa、eradicate、pyupgrade和 autoflake,所有这些都比任何单独的工具执行速度快几十或数百倍。Ruff 超越了传统 linter 的职责,而是作为一种高级代码转换工具,能够升级类型注释、重写类定义、对import导入进行排序等等。
主要功能特点
从Ruff官方介绍,可以看到目前有以下特点:
- 支持 pyproject.toml
- 兼容 Python 3.11
- 超过 500 条内置规则,与 Flake8 内置的规则集近乎对等
- 重新实现了数十个 Flake8 插件,如 flake8-bugbear、flake8-comprehensions 等
- 支持自动修复,可自动纠正错误(例如,删除未使用的导入)
- 内置缓存,可避免重复分析未更改的文件
- 支持 VS Code、Pycharm、Neovim、Sublime Text、Emacs 等编辑器
- 对 monorepo 友好,具有分层和级联配置
其中着重的一点是对规则的支持。Ruff 借鉴了流行的工具如 Flake8、autoflake、isort、pyupgrade、yesqa 等等,然后用 Rust 重新实现了超过 500 条规则。它本身不支持插件,但是吸收了数十个常用的 Flake8 插件的设计,使得已囊括的规则范围比其它任何工具都大。例如实现了部分flake8的插件。
安装和使用
Ruff在安装上也是非常简单,可以像其他第三方Python包一样通过pip安装,只需按照以下步骤进行操作:
pip install ruff
安装完成后,Windows会在Python版本Scripts目录下生成一个ruff.exe的可执行文件;MacOS会在Python版本bin目录下生成一个ruff的可执行文件。
执行检查命令
1、针对指定文件扫描
ruff check path/file.py
2、使用通配符进行扫描
ruff check path/*.py
3、还可以在watch监控模式下运行 Ruff,当文件改变时自动执行:
ruff path/ --watch
4、按照不同的目录和文件执行检查
ruff check . # 分析当前及子目录内的所有文件 ruff check path/to/code/ # 分析指定目录及子目录内的所有文件 ruff check path/to/code/*.py # 分析指定目录内的所有py文件 ruff check path/to/code/to/file.py # 分析 file.py
5、还可以和 pre-commit 一起工作:
- repo: https://github.com/charliermarsh/ruff-pre-commit # Ruff version. rev: 'v0.0.261' hooks: - id: ruff
最终,Ruff将生成一个报告文件,其中包含了检查结果和问题的详细信息。我们可以根据报告中的建议来修复代码中的问题。
总结
Ruff 可以在代码质量、代码规范、团队协作、持续集成等多种场景下应用。而且还有官方提供的VS Code的插件,非常方便实用。但是目前还没有发布Pycharm的插件。