提升你的Python编程风格与Ruff

改善你的Python编程风格和Ruff技巧

 

什么是Ruff

 

Ruff是一个用Rust编写的极快的Python代码检查器和格式化器,旨在替代和改进现有的工具,如Flake8、Black和isort。它提供了10-100倍更快的性能,同时通过700多个内置规则和流行插件的重新实现,保持了功能的一致性。

  

Ruff支持与3.12版本兼容以及`pyproject.toml`。它还提供了自动修复支持、缓存和编辑器集成。Ruff在像Pandas、FastAPI等重要开源项目中被广泛使用。通过将速度、功能和易用性结合起来,Ruff将代码检查、格式化和自动修复集成到一个统一的工具中,比现有选项的速度快了数个数量级。

 

开始使用Ruff

 

我们可以通过使用PIP简单地安装`ruff`。

pip install ruff

 

为了测试运行Ruff的方便和快捷性,我们可以使用DagHub仓库kingabzpro/Yoga-Pose-Classification。您可以克隆它,也可以使用您自己的项目进行格式化。

首先,我们将对我们的项目运行检查器。您也可以通过将“.”替换为文件位置,在单个文件上运行检查器。

ruff check .

 

 

Ruff找到了9个错误和1个可修复的错误。要修复该错误,我们将使用–fix标志。

ruff check --fix .

 

如您所见,它修复了1个可修复的错误。  为了格式化项目,我们将使用`ruff format`命令。

$ ruff format .>>> 重新格式化了3个文件

 

Ruff代码检查器和格式化器对代码进行了许多更改。那么,为什么我们需要这些工具呢?答案很简单 – 它们有助于强制执行编码标准和约定。因此,您和您的团队都可以专注于代码的重要方面。此外,它们有助于提高我们代码的质量、可维护性和安全性。

 

 

对Jupyter Notebooks进行代码检查和格式化

 

要在项目中使用Ruff对Jupyter Notebooks进行处理,您必须创建`ruff.toml`文件并添加以下代码:

extend-include = ["*.ipynb"]

 

您也可以在`pyproject.toml`文件中执行同样的操作。

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

2个文件被重新格式化,我们还有2个笔记本文件。

$ ruff format .>>> 重新格式化了2个文件,保留了3个文件不变

我们也通过再次运行`check`命令来修复那些文件中的问题。

$ ruff check --fix .>>> 发现了51个错误(6个已修复,45个仍存在)。

最终结果令人惊叹。它在不破坏代码的情况下做出了所有必要的更改。

Ruff配置

通过编辑`ruff.toml`文件调整linter和formatter设置,可以轻松配置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用作pre-commit hook:

- repo: https://github.com/astral-sh/ruff-pre-commit  # Ruff版本.  rev: v0.1.5  hooks:    # 运行linter。    - id: ruff      args: [ --fix ]    # 运行formatter。    - id: ruff-format

它也可以通过`ruff-action`用作GitHub Action:

name: Ruffon: [ 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来安装它。

图片来自Ruff – Visual Studio Marketplace

我已经配置了`setting.json`以便在保存时进行格式化。

结论

Ruff提供了快速的linting和格式化功能,可用于更干净、更一致的Python代码。Ruff重新实现了700多个内置规则,并结合Rust进行性能优化,借鉴了Flake8、isort和pyupgrade等热门工具,以实施一套全面的最佳编码实践。精选的规则集侧重于捕获错误和关键的样式问题,而不会过度吹毛求疵。

与pre-commit hooks、GitHub Actions以及像VSCode这样的编辑器无缝集成,使得将Ruff纳入现代Python工作流程变得容易。无与伦比的速度和精心设计的规则集使得Ruff成为重视快速反馈、干净代码和良好团队协作的Python开发者的必备工具。Ruff通过将强大的功能与卓越的性能相结合,为Python linting和格式化设定了一个新标准。

****[Abid Ali Awan](https://www.polywork.com/kingabzpro)**** (@1abidaliawan) 是一位经过认证的数据科学家,热衷于构建机器学习模型。目前,他专注于内容创作,撰写有关机器学习和数据科学技术的技术博客。Abid拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络为那些与心理疾病斗争的学生构建一个AI产品。