使用Ruff增强Python编码风格

2023年11月21日 由 camellia 发表 444 0
什么是Ruff
 
Ruff 是一个用 Rust 编写的极快的 Python linter 和格式化程序,旨在替换和改进现有的工具,如 Flake8、Black 和 isort。它提供了10-100倍的性能提升,同时通过700多个内置规则和流行插件的重新实现保持了奇偶校验。

2
Ruff 支持兼容3.12的现代 Python 和“pyproject.toml”。它还提供自动修复支持、缓存和编辑器集成。Ruff 对 monorepo 友好,用于 Pandas、FastAPI 等主要开源项目。通过将速度、功能和可用性相结合,Ruff 将 linting、格式化和自动修复集成到一个统一的工具中,该工具比现有选项快几个数量级。

Ruff 入门

我们可以通过使用 PIP 轻松安装“ruff”。
pip install ruff
为了测试运行 Ruff 的难易程度和速度,我们可以使用 DagHub 存储库 kingabzpro/Yoga-Pose-Classification。你可以克隆它或使用自己的项目进行格式化。
3
首先,我们将对项目运行一个 linter。你还可以通过将“.”替换为文件位置来对单个文件运行 linter。
ruff check .
9个错误
Ruff 发现了9个错误和1个可修复的错误。为了修复错误,我们将使用--fix 标志。
ruff check --fix .
如你所见,它修复了1个可修复的错误。
修复1下
要格式化项目,我们将使用“ruff format”命令。
$ ruff format .
>>> 3 files reformatted
Ruff linter 和格式化程序对代码进行了大量更改。但是,为什么我们需要这些工具呢?答案很简单-它们有利于执行编码标准和约定。因此,你和你的团队都可以专注于代码的重要方面。此外,它们还有助于提高我们代码的质量、可维护性和安全性。
动图
对 Jupyter Notebook 进行 linting 和格式化

若要在项目中使用 Ruff for Jupyter Notebooks,必须创建“ruff.toml”文件并添加以下代码:
extend-include = ["*.ipynb"]
你也可以对“pyproject.toml”文件执行相同的操作。

之后,重新运行命令以查看它对 Jupyter 笔记本文件所做的更改。

2个文件被重新格式化,我们有2个笔记本文件。
$ ruff format .
>>> 2 files reformatted, 3 files left unchanged
我们还通过再次运行“check”命令修复了这些文件中的问题。
$ ruff check --fix .
>>> Found 51 errors (6 fixed, 45 remaining).
最终的结果令人惊叹。它已经在不破坏代码的情况下进行了所有必要的更改。

动图2
Ruff 配置
 
通过编辑“ruff.toml”文件来调整 linter 和格式化程序设置,可以轻松地为 Jupyter Notebooks 配置 Ruff。有关更多详细信息,请查看配置 Ruff 文档。
target-version = "py311"
extend-include = ["*.ipynb"]
line-length = 80

[lint]
extend-select = [
"UP", # pyupgrade
"D", # pydocstyle
]

[lint.pydocstyle]
convention = "google"
GitHub Action &  Pre-commit Hook
 
开发人员和团队可以通过“ruff-pre-commit”将 Ruff 用作预提交钩子:
- repo: https://github.com/astral-sh/ruff-pre-commit
  # Ruff version.
  rev: v0.1.5
  hooks:
    # Run the linter.
    - id: ruff
      args: [ --fix ]
    # Run the formatter.
    - id: ruff-format
它也可以通过“ruff-action”用作 GitHub Action:
name: Ruff
on: [ push, pull_request ]
jobs:
  ruff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: chartboost/ruff-action@v1
Ruff VSCode 扩展
 
Ruff 最令人愉快的方面是它的 VSCode 扩展。它简化了格式设置和 linting,消除了对第三方扩展的需求。只需在扩展市场上搜索 Ruff 即可安装它。
下
我已经配置了“setting.json”,以便在保存时格式化。

结论
 

Ruff 提供闪电般快速的 linting 和格式化,以实现更简洁、更一致的 Python 代码。Ruff 在 Rust 中重新实现了700多个内置规则以提高性能,从 Flake8、isort 和 pyupgrade 等流行工具中汲取灵感,以实施一套全面的编码最佳实践。精心策划的规则集侧重于捕获错误和关键样式问题,而不会过多吹毛求疵。

与预提交钩子、GitHub Actions 和 VSCode 等编辑器的无缝集成使将 Ruff 整合到现代 Python 工作流程中变得容易。无与伦比的速度和精心设计的规则集使 Ruff 成为重视快速反馈、干净代码和顺畅团队协作的 Python 开发人员的必备工具。Ruff 通过将强大的功能与出色的性能相结合,为 Python linting 和格式化设定了新标准。
 
文章来源:https://www.kdnuggets.com/enhance-your-python-coding-style-with-ruff
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消