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