• Python代码质量检查工具Ruff的安装和使用
  • 发布于 2个月前
  • 263 热度
    0 评论
  • 冰魄
  • 0 粉丝 39 篇博客
  •   

在软件开发中,代码质量是至关重要的。为了保证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的插件。
用户评论