文檔|操場
一個非常快速的 Python linter 和程式碼格式化程序,用 Rust 寫。
從頭開始對 CPython 程式碼庫進行 Linting。
pip
安裝pyproject.toml
支持Ruff 的目標是比其他工具快幾個數量級,同時在單一通用介面後面整合更多功能。
Ruff 可用於取代 Flake8(以及數十個插件)、Black、isort、pydocstyle、pyupgrade、autoflake 等,同時執行速度比任何單一工具快數十或數百倍。
Ruff 在主要開源專案中得到了非常積極的開發和使用,例如:
……還有更多。
Ruff 得到了 Astral 的支持。閱讀發布貼文或原始專案公告。
Sebastián Ramírez ,FastAPI 的創作者:
Ruff 速度如此之快,有時我會在程式碼中故意添加錯誤,只是為了確認它確實正在運行並檢查程式碼。
Nick Schrock ,Elementl 創辦人、GraphQL 共同創辦人:
為什麼 Ruff 能夠改變遊戲規則?主要是因為它快了近 1000 倍。字面上地。不是錯字。在我們最大的模組(dagster 本身,250k LOC)上,pylint 大約需要 2.5 分鐘,在我的 M1 上的 4 個核心上並行。對我們的整個程式碼庫運行 ruff 需要 0.4 秒。
Bryan Van de Ven ,Bokeh 共同創辦人,Conda 原作者:
在我的機器上,Ruff 比 flake8 快約 150-200 倍,掃描整個儲存庫需要約 0.2 秒,而不是約 20 秒。這對當地開發者來說是生活品質的巨大改善。它的速度足夠快,我將其添加為實際的提交掛鉤,這非常棒。
蒂莫西·克羅斯利(Timothy Crosley) , isort 的創造者:
剛剛將我的第一個項目切換到 Ruff。到目前為止只有一個缺點:它太快了,我簡直不敢相信它能正常工作,直到我故意引入了一些錯誤。
Zulip 的首席開發人員Tim Abbott :
這速度快得離譜……
ruff
太棒了。
有關更多信息,請參閱文檔。
有關更多信息,請參閱文檔。
Ruff 在 PyPI 上可以作為ruff
使用:
# With uv.
uv add --dev ruff # to add ruff to your project
uv tool install ruff # to install ruff globally
# With pip.
pip install ruff
# With pipx.
pipx install ruff
從版本0.5.0
開始,Ruff 可以使用我們的獨立安裝程式進行安裝:
# On macOS and Linux.
curl -LsSf https://astral.sh/ruff/install.sh | sh
# On Windows.
powershell -c " irm https://astral.sh/ruff/install.ps1 | iex "
# For a specific version.
curl -LsSf https://astral.sh/ruff/0.8.2/install.sh | sh
powershell -c " irm https://astral.sh/ruff/0.8.2/install.ps1 | iex "
您也可以透過 Homebrew、Conda 以及各種其他套件管理器安裝 Ruff。
若要將 Ruff 作為 linter 運行,請嘗試以下任一操作:
ruff check # Lint all files in the current directory (and any subdirectories).
ruff check path/to/code/ # Lint all files in `/path/to/code` (and any subdirectories).
ruff check path/to/code/ * .py # Lint all `.py` files in `/path/to/code`.
ruff check path/to/code/to/file.py # Lint `file.py`.
ruff check @arguments.txt # Lint using an input file, treating its contents as newline-delimited command-line arguments.
或者,將 Ruff 作為格式化程式運行:
ruff format # Format all files in the current directory (and any subdirectories).
ruff format path/to/code/ # Format all files in `/path/to/code` (and any subdirectories).
ruff format path/to/code/ * .py # Format all `.py` files in `/path/to/code`.
ruff format path/to/code/to/file.py # Format `file.py`.
ruff format @arguments.txt # Format using an input file, treating its contents as newline-delimited command-line arguments.
Ruff 也可以透過ruff-pre-commit
用作預先提交鉤子:
- repo : https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev : v0.8.2
hooks :
# Run the linter.
- id : ruff
args : [ --fix ]
# Run the formatter.
- id : ruff-format
Ruff 也可以用作 VS Code 擴充功能或與各種其他編輯器一起使用。
Ruff 也可以透過ruff-action
用作 GitHub Action:
name : Ruff
on : [ push, pull_request ]
jobs :
ruff :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : astral-sh/ruff-action@v1
Ruff 可以透過pyproject.toml
、 ruff.toml
或.ruff.toml
檔案進行設定(請參閱:設定或設定以取得所有設定選項的完整清單)。
如果未指定,Ruff 的預設設定相當於以下ruff.toml
檔案:
# Exclude a variety of commonly ignored directories.
exclude = [
" .bzr " ,
" .direnv " ,
" .eggs " ,
" .git " ,
" .git-rewrite " ,
" .hg " ,
" .ipynb_checkpoints " ,
" .mypy_cache " ,
" .nox " ,
" .pants.d " ,
" .pyenv " ,
" .pytest_cache " ,
" .pytype " ,
" .ruff_cache " ,
" .svn " ,
" .tox " ,
" .venv " ,
" .vscode " ,
" __pypackages__ " ,
" _build " ,
" buck-out " ,
" build " ,
" dist " ,
" node_modules " ,
" site-packages " ,
" venv " ,
]
# Same as Black.
line-length = 88
indent-width = 4
# Assume Python 3.9
target-version = " py39 "
[ lint ]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
select = [ " E4 " , " E7 " , " E9 " , " F " ]
ignore = []
# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = [ " ALL " ]
unfixable = []
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = " ^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$ "
[ format ]
# Like Black, use double quotes for strings.
quote-style = " double "
# Like Black, indent with spaces, rather than tabs.
indent-style = " space "
# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false
# Like Black, automatically detect the appropriate line ending.
line-ending = " auto "
請注意,在pyproject.toml
中,每個節標題應以tool.ruff
為前綴。例如, [lint]
應替換為[tool.ruff.lint]
。
一些設定選項可以透過專用命令列參數提供,例如與規則啟用和停用、檔案發現和日誌記錄等級相關的選項:
ruff check --select F401 --select F403 --quiet
其餘的設定選項可以透過一個包羅萬象的--config
參數提供:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
若要選擇最新的 lint 規則、格式化程式樣式變更、介面更新等,請透過在設定檔中設定preview = true
或在命令列上傳遞--preview
來啟用預覽模式。預覽模式支援一系列不穩定的功能,這些功能可能會在穩定之前發生變化。
有關 Ruff 頂級命令的更多信息,請參閱ruff help
,或分別有關 linting 和格式化命令的更多信息,請ruff help check
和ruff help format
。
Ruff 支援 800 多種 lint 規則,其中許多規則受到 Flake8、isort、pyupgrade 等流行工具的啟發。無論規則的起源為何,Ruff 都會將 Rust 中的每個規則重新實作為第一方功能。
預設情況下,Ruff 啟用 Flake8 的F
規則以及E
規則的子集,忽略與格式化程式的使用重疊的任何風格規則,例如ruff format
或 Black。
如果您剛開始使用 Ruff,預設規則集是一個很好的起點:它以零配置捕獲各種常見錯誤(例如未使用的導入)。
除了預設值之外,Ruff 還重新實現了一些最受歡迎的 Flake8 插件和相關程式碼品質工具,包括:
有關支援的規則的完整枚舉,請參閱規則。
歡迎並高度讚賞您的貢獻。首先,請查看貢獻指南。
您也可以加入我們的Discord 。
有麻煩嗎?看看GitHub上的現有問題,或隨意開啟一個新問題。
您也可以在Discord上尋求協助。
Ruff 的 linter 借鑒了 Python 生態系統中許多其他工具的 API 和實作細節,特別是 Flake8、Pyflakes、pycodestyle、pydocstyle、pyupgrade 和 isort。
在某些情況下,Ruff 包含對應工具的「直接」Rust 連接埠。我們感謝這些工具的維護者所做的工作以及他們為 Python 社群提供的所有價值。
Ruff 的格式化程式是基於 Rome 的rome_formatter
的分支構建,並再次藉鑒了 Rome、Prettier 和 Black 的 API 和實作細節。
Ruff 的導入解析器是基於 Pyright 的導入解析演算法。
Ruff 也受到 Python 生態系統之外的許多工具的影響,例如 Clippy 和 ESLint。
Ruff 是大量貢獻者的受益者。
Ruff 是在 MIT 許可下發布的。
Ruff 被許多主要開源專案和公司使用,包括:
如果您使用 Ruff,請考慮將 Ruff 徽章新增至專案的README.md
:
[ ![ Ruff ] ( https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json )] ( https://github.com/astral-sh/ruff )
...或README.rst
:
.. image :: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
……或者,作為 HTML:
< a href =" https://github.com/astral-sh/ruff " > < img src =" https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json " alt =" Ruff " style =" max-width:100%; " > </ a >
該儲存庫已根據 MIT 許可證獲得許可