一个极快的Python代码检查器和格式化工具,用Rust编写。
项目描述
Ruff
一个极快的Python代码检查器和格式化工具,用Rust编写。
从头开始对CPython代码库进行代码检查。
- ⚡️ 比现有的代码检查器(如Flake8)和格式化工具(如Black)快10-100倍
- 🐍 通过
pip
安装 - 🛠️ 支持
pyproject.toml
- 🤝 Python 3.13 兼容性
- ⚖️ 与 Flake8、isort 和 Black 兼容
- 📦 内置缓存,避免重复分析未更改的文件
- 🔧 支持修复,用于自动错误纠正(例如,自动删除未使用的导入)
- 📏 超过 800 个内置规则,具有对流行的Flake8插件(如flake8-bugbear)的本地重新实现
- ⌨️ 为 VS Code 和 更多 提供第一方编辑器集成
- 🌎 单一仓库友好,具有 分层和级联配置
Ruff旨在比替代工具快几个数量级,同时在单个公共接口下集成更多功能。
Ruff可以用来替代Flake8(以及数十个插件)、Black、isort、pydocstyle、pyupgrade、autoflake 等,所有这些在执行速度上比任何单个工具快数十倍或数百倍。
Ruff在Apache Airflow、Apache Superset、FastAPI、Hugging Face、Pandas、SciPy等主要开源项目中得到积极开发和使用
...以及 许多其他项目。
Ruff由Astral支持。阅读启动帖子,或原始的项目公告。
用户评价
Ruff运行如此之快,有时我会在代码中故意添加一个有意为之的错误,只是为了确认它实际上正在运行并检查代码。
Nick Schrock,Elementl的创始人,GraphQL的共同创建者
为什么Ruff是一个颠覆性的工具?主要是因为它几乎快1000倍。字面上的。不是打字错误。在我们的最大模块(dagster本身,250k行代码)上,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。到目前为止只有一个缺点:它运行得太快了,我简直不敢相信它在工作,直到我故意引入了一些错误。
Tim Abbott,Zulip的负责人开发人员
这太不可思议了...
ruff
太棒了。
目录
更多内容,请参阅文档。
入门
更多内容,请参阅文档。
安装
Ruff可在PyPI上的ruff
中获取
# 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.6.9/install.sh | sh
powershell -c "irm https://astral.sh/ruff/0.6.9/install.ps1 | iex"
您还可以通过Homebrew、Conda以及各种其他包管理器安装Ruff。
使用
要作为检查器运行Ruff,尝试以下任何一种
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还可以通过pre-commit钩子使用ruff-pre-commit
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.6.9
hooks:
# Run the linter.
- id: ruff
args: [ --fix ]
# Run the formatter.
- id: ruff-format
Ruff还可以作为VS Code扩展或与各种其他编辑器一起使用。
Ruff还可以通过GitHub Action使用ruff-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.8
target-version = "py38"
[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']}"
要选择最新的检查规则、格式化器样式更改、界面更新等,请通过在配置文件中设置preview = true
或在命令行上传递--preview
来启用预览模式。预览模式启用了一组可能在不稳定之前发生变化的不稳定功能。
有关Ruff的顶级命令,请参阅ruff help
,有关检查和格式化命令,请分别参阅ruff help check
和ruff help format
。
规则
Ruff支持超过800个检查规则,其中许多受到Flake8、isort、pyupgrade等流行工具的启发。无论规则的来源如何,Ruff都将其作为第一方功能在Rust中重新实现。
默认情况下,Ruff启用了Flake8的F
规则以及E
规则的子集,省略了任何与格式化器使用的样式规则重叠的规则,如ruff format
或Black。
如果您刚开始使用Ruff,默认规则集是一个很好的起点:它不需要配置即可捕获各种常见错误(如未使用的导入)。
除了默认规则外,Ruff还重新实现了Flake8的一些最受欢迎的插件和相关代码质量工具,包括
- autoflake
- eradicate
- flake8-2020
- flake8-annotations
- flake8-async
- flake8-bandit (#1646)
- flake8-blind-except
- flake8-boolean-trap
- flake8-bugbear
- flake8-builtins
- flake8-commas
- flake8-comprehensions
- flake8-copyright
- flake8-datetimez
- flake8-debugger
- flake8-django
- flake8-docstrings
- flake8-eradicate
- flake8-errmsg
- flake8-executable
- flake8-future-annotations
- flake8-gettext
- flake8-implicit-str-concat
- flake8-import-conventions
- flake8-logging
- flake8-logging-format
- flake8-no-pep420
- flake8-pie
- flake8-print
- flake8-pyi
- flake8-pytest-style
- flake8-quotes
- flake8-raise
- flake8-return
- flake8-self
- flake8-simplify
- flake8-slots
- flake8-super
- flake8-tidy-imports
- flake8-todos
- flake8-type-checking
- flake8-use-pathlib
- flynt (#2102)
- isort
- mccabe
- pandas-vet
- pep8-naming
- pydocstyle
- pygrep-hooks
- pylint-airflow
- pyupgrade
- tryceratops
- yesqa
有关支持的规则完整列表,请参阅规则。
贡献
欢迎并高度重视贡献。要开始,请查看贡献指南。
您还可以加入我们的Discord。
支持
遇到问题?请查看GitHub上的现有问题,或者您可以新建一个问题。
您还可以在Discord上寻求帮助。
致谢
Ruff的代码检查器借鉴了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被多个主要开源项目和公司使用,包括
- Albumentations
- Amazon (AWS SAM)
- Anthropic (Python SDK)
- Apache Airflow
- AstraZeneca (Magnus)
- Babel
- Benchling (Refac)
- Bokeh
- Cryptography (PyCA)
- 欧洲核子研究中心 (Indico)
- 数据虚拟化客户端 (DVC)
- Dagger
- Dagster
- 数据桥 (Databricks) (MLflow)
- Diffy
- FastAPI
- Godot
- Gradio
- Great Expectations
- HTTPX
- Hatch
- 家庭助手 (Home Assistant)
- 拥抱脸 (Hugging Face) (Transformers, Datasets, Diffusers)
- 国际商业机器公司 (IBM) (Qiskit)
- 荷兰国际集团银行 (ING Bank) (popmon, probatus)
- Ibis
- ivy
- Jupyter
- Kraken 科技
- LangChain
- Litestar
- LlamaIndex
- 矩阵 (Synapse)
- MegaLinter
- Meltano (Meltano CLI, Singer SDK)
- 微软 (Microsoft) (Semantic Kernel, ONNX Runtime, LightGBM)
- 现代国库 (Modern Treasury) (Python SDK)
- Mozilla (Firefox)
- Mypy
- Nautobot
- Netflix (Dispatch)
- Neon
- Nokia
- NoneBot
- NumPyro
- ONNX
- OpenBB
- Open Wine Components
- PDM
- PaddlePaddle
- Pandas
- Pillow
- Poetry
- Polars
- PostHog
- Prefect (Python SDK, Marvin)
- PyInstaller
- PyMC
- PyMC-Marketing
- pytest
- PyTorch
- Pydantic
- Pylint
- PyVista
- Reflex
- River
- Rippling
- Robyn
- Saleor
- Scale AI (Launch SDK)
- SciPy
- Snowflake (SnowCLI)
- Sphinx
- Stable Baselines3
- Starlette
- Streamlit
- 算法
- Vega-Altair
- WordPress (Openverse)
- ZenML
- Zulip
- 构建 (PyPA)
- cibuildwheel (PyPA)
- delta-rs
- 特征工具 (featuretools)
- meson-python
- nox
- pip
显示您的支持
如果您使用 Ruff,请考虑将 Ruff 徽章添加到项目的 README.md
[](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 许可协议许可
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
哈希值(ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa |
|
MD5 | 5bd070e8088881493c372974b3a90919 |
|
BLAKE2b-256 | a78696f4252f41840e325b3fa6c48297e661abb9f564bd7dcc0572398c8daa42 |
哈希值(ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f |
|
MD5 | 45c8aa8930df6ef4a6b03d6d4d0a3205 |
|
BLAKE2b-256 | f7f6bdf891a9200d692c94ebcd06ae5a2fa5894e522f2c66c2a12dd5d8cb2654 |
哈希值(ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7 |
|
MD5 | 74507538db05ed7ba1630d0dad95f910 |
|
BLAKE2b-256 | 2e6d25a4386ae4009fc798bd10ba48c942d1b0b3e459b5403028f1214b6dd161 |
哈希值(ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5 |
|
MD5 | 99cb87520abdf7bcd8c65d1a7ace13c0 |
|
BLAKE2b-256 | 1334a40ff8ae62fb1b26fb8e6fa7e64bc0e0a834b47317880de22edd6bfb54fb |
哈希值(ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl)
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829 |
|
MD5 | 90f120d674833670994b4fcad3548e82 |
|
BLAKE2b-256 | 6cd67f34160818bcb6e84ce293a5966cba368d9112ff0289b273fbb689046047 |
哈希值 用于 ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577 |
|
MD5 | 48b9b452b2693e8fcd82d0c413c718c8 |
|
BLAKE2b-256 | 13d7def9e5f446d75b9a9c19b24231a3a658c075d79163b08582e56fa5dcfa38 |
哈希值 用于 ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e |
|
MD5 | 33789e32bd8d43b1cf541358b1ca79be |
|
BLAKE2b-256 | 2961b376d775deb5851cb48d893c568b511a6d3625ef2c129ad5698b64fb523c |