使用Ruff改善Python編程風(fēng)格
譯文譯者 | 布加迪
審校 | 重樓
Ruff簡介
Ruff是一個(gè)用Rust編寫的運(yùn)行速度極快的Python代碼檢查器和格式化器,旨在取代和改進(jìn)Flake8、Black和isort等現(xiàn)有工具。它將性能提升了10倍至100倍,同時(shí)通過700多個(gè)內(nèi)置規(guī)則和重新實(shí)現(xiàn)的流行插件保持奇偶校驗(yàn)。
圖1.從頭開始檢查CPython代碼庫
Ruff與Python 3.12兼容,支持現(xiàn)代 Python。它還提供自動修復(fù)支持、緩存和編輯器集成。Ruff對單一代碼庫友好,用于Pandas和FastAPI等各大開源項(xiàng)目。由于集速度、功能和可用性于一體,Ruff將代碼檢查、格式化和自動修復(fù)集成到統(tǒng)一的工具中,速度比現(xiàn)有的工具快幾個(gè)數(shù)量級。
Ruff入門
我們可以使用PIP輕松安裝Ruff。
pip install ruff
為了測試Ruff運(yùn)行起來有多容易多快速,我們可以使用DagHub存儲庫kingabzpro/Yoga-Pose-Classification。您可以克隆它,也可以使用自己的項(xiàng)目進(jìn)行格式化。
圖2. 項(xiàng)目結(jié)構(gòu)
首先,我們將對項(xiàng)目運(yùn)行代碼檢查。您也可以對單個(gè)文件運(yùn)行代碼檢查,只需把“.”換成文件位置。
ruff check .
Ruff已經(jīng)確定了9個(gè)錯(cuò)誤和1個(gè)可修復(fù)的錯(cuò)誤。為了修復(fù)這個(gè)錯(cuò)誤,我們將使用--fix標(biāo)志。
ruff check --fix
正如您所見,它修復(fù)了1個(gè)可修復(fù)的錯(cuò)誤。
若要格式化項(xiàng)目,我們可以使用“ruff format”命令。
$ ruff format .
>>> 3 files reformatted
Ruff代碼檢查器和格式化器對代碼進(jìn)行了大量更改。但是我們?yōu)槭裁葱枰@些工具?答案很簡單——它們有利于執(zhí)行編碼標(biāo)準(zhǔn)和約定。因此,您和您的團(tuán)隊(duì)可以專注于代碼的重要方面。此外,它們有助于提高代碼的質(zhì)量、可維護(hù)性和安全性。
檢查和格式化Jupyter Notebooks
要在項(xiàng)目中使用Ruff for Jupyter Notebooks,您必須創(chuàng)建“ruff.toml”文件,并添加以下代碼:
extend-include = ["*.ipynb"]
您還可以對“pyproject .toml”執(zhí)行相同的操作。
之后,重新運(yùn)行命令,看看它是否對Jupyter notebook文件進(jìn)行了更改。
2個(gè)文件被重新格式化,我們有2個(gè)Notebook文件。
$ ruff format .
>>> 2 files reformatted, 3 files left unchanged
我們還通過再次運(yùn)行“check”命令修復(fù)這些文件中的問題。
$ ruff check --fix .
>>> Found 51 errors (6 fixed, 45 remaining).
最后的結(jié)果是驚人的。它在不破壞代碼的情況下進(jìn)行了所有必要的更改。
Ruff配置
很容易為Jupyter Notebooks配置Ruff,只需編輯“ruff.toml”文件來調(diào)整代碼檢查器和格式化器設(shè)置。請查看配置Ruff文檔以了解更多詳細(xì)信息。
target-version = "py311"
extend-include = ["*.ipynb"]
line-length = 80
[lint]
extend-select = [
"UP", # pyupgrade
"D", # pydocstyle
]
[lint.pydocstyle]
convention = "google"
GitHub Action和預(yù)提交鉤子
開發(fā)人員和團(tuán)隊(duì)可以通過“ruff -pre-commit”將Ruff用作預(yù)提交鉤子:
- 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擴(kuò)展
Ruff最討人喜歡的方面是其VSCode擴(kuò)展。它簡化了格式化和代碼檢查,因而不需要第三方擴(kuò)展。只需在擴(kuò)展市場上搜索Ruff即可安裝它。
我已經(jīng)配置了“setting.json”,以便在保存時(shí)格式化。
結(jié)語
Ruff提供了速度飛快的代碼檢查和格式化,使Python代碼更干凈、更一致。Ruff從Flake8、isort和pyupgrade等流行工具中汲取靈感,通過用Rust重新實(shí)現(xiàn)700多個(gè)內(nèi)置規(guī)則來提高性能,從而實(shí)現(xiàn)了一套全面的編碼最佳實(shí)踐。精挑細(xì)選的規(guī)則集專注于捕捉錯(cuò)誤和關(guān)鍵的風(fēng)格問題,又不過度挑剔。
與預(yù)提交鉤子、GitHub Actions和VSCode等編輯器無縫集成使用戶可以將Ruff輕松整合到現(xiàn)代Python工作流中。無與倫比的速度和精心設(shè)計(jì)的規(guī)則集使Ruff成為重視快速反饋、干凈代碼和團(tuán)隊(duì)順暢協(xié)作的Python開發(fā)人員的必備工具。Ruff通過將強(qiáng)大的功能與出色的性能相結(jié)合,為Python代碼檢查和格式化設(shè)立了新的標(biāo)準(zhǔn)。
原文標(biāo)題:Enhance Your Python Coding Style with Ruff,作者:Abid Ali Awan