Dokumente | Spielplatz
Ein extrem schneller Python-Linter und Code-Formatierer, geschrieben in Rust.
Linting der CPython-Codebasis von Grund auf.
pip
pyproject.toml
UnterstützungZiel von Ruff ist es, um Größenordnungen schneller zu sein als alternative Tools und gleichzeitig mehr Funktionalität hinter einer einzigen, gemeinsamen Schnittstelle zu integrieren.
Ruff kann verwendet werden, um Flake8 (plus Dutzende Plugins), Black, isort, pydocstyle, pyupgrade, autoflake und mehr zu ersetzen und dabei zehn- oder hundertmal schneller als jedes einzelne Tool auszuführen.
Ruff wird äußerst aktiv weiterentwickelt und in großen Open-Source-Projekten eingesetzt wie:
...und viele mehr.
Ruff wird von Astral unterstützt. Lesen Sie den Startbeitrag oder die ursprüngliche Projektankündigung.
Sebastián Ramírez , Erfinder von FastAPI:
Ruff ist so schnell, dass ich manchmal absichtlich einen Fehler in den Code einfüge, nur um zu bestätigen, dass er tatsächlich ausgeführt wird und den Code überprüft.
Nick Schrock , Gründer von Elementl, Mitschöpfer von GraphQL:
Warum ist Ruff ein Gamechanger? Vor allem, weil es fast 1000x schneller ist. Buchstäblich. Kein Tippfehler. Auf unserem größten Modul (Dagster selbst, 250.000 LOC) dauert Pylint etwa 2,5 Minuten, parallelisiert über 4 Kerne auf meinem M1. Das Ausführen von Ruff gegen unsere gesamte Codebasis dauert 0,4 Sekunden.
Bryan Van de Ven , Mitschöpfer von Bokeh, ursprünglicher Autor von Conda:
Ruff ist auf meinem Rechner etwa 150-200x schneller als flake8, das Scannen des gesamten Repos dauert etwa 0,2 Sekunden statt etwa 20 Sekunden. Dies ist eine enorme Verbesserung der Lebensqualität für lokale Entwickler. Es ist schnell genug, dass ich es als echten Commit-Hook hinzugefügt habe, was großartig ist.
Timothy Crosley , Schöpfer von isort:
Ich habe gerade mein erstes Projekt auf Ruff umgestellt. Bisher gibt es nur einen Nachteil: Es ist so schnell, dass ich nicht glauben konnte, dass es funktioniert, bis ich absichtlich ein paar Fehler gemacht habe.
Tim Abbott , Hauptentwickler von Zulip:
Das ist einfach unglaublich schnell...
ruff
ist unglaublich.
Weitere Informationen finden Sie in der Dokumentation.
Weitere Informationen finden Sie in der Dokumentation.
Ruff ist als ruff
auf PyPI verfügbar:
# 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
Ab Version 0.5.0
kann Ruff mit unseren eigenständigen Installationsprogrammen installiert werden:
# 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 "
Sie können Ruff auch über Homebrew, Conda und eine Reihe anderer Paketmanager installieren.
Um Ruff als Linter auszuführen, versuchen Sie einen der folgenden Schritte:
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.
Oder um Ruff als Formatierer auszuführen:
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 kann über ruff-pre-commit
auch als Pre-Commit-Hook verwendet werden:
- 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 kann auch als VS Code-Erweiterung oder mit verschiedenen anderen Editoren verwendet werden.
Ruff kann auch als GitHub-Aktion über ruff-action
verwendet werden:
name : Ruff
on : [ push, pull_request ]
jobs :
ruff :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : astral-sh/ruff-action@v1
Ruff kann über eine pyproject.toml
, ruff.toml
oder .ruff.toml
Datei konfiguriert werden (siehe: Konfiguration oder Einstellungen für eine vollständige Liste aller Konfigurationsoptionen).
Wenn nichts angegeben wird, entspricht die Standardkonfiguration von Ruff der folgenden ruff.toml
Datei:
# 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 "
Beachten Sie, dass in einem pyproject.toml
jeder Abschnittsüberschrift das Präfix tool.ruff
vorangestellt werden sollte. Beispielsweise sollte [lint]
durch [tool.ruff.lint]
ersetzt werden.
Einige Konfigurationsoptionen können über dedizierte Befehlszeilenargumente bereitgestellt werden, z. B. solche im Zusammenhang mit der Aktivierung und Deaktivierung von Regeln, der Dateierkennung und der Protokollierungsebene:
ruff check --select F401 --select F403 --quiet
Die übrigen Konfigurationsoptionen können über ein Catch-All-Argument --config
bereitgestellt werden:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
Um sich für die neuesten Lint-Regeln, Formatierungsstiländerungen, Schnittstellenaktualisierungen und mehr zu entscheiden, aktivieren Sie den Vorschaumodus, indem Sie in Ihrer Konfigurationsdatei preview = true
festlegen oder --preview
in der Befehlszeile übergeben. Der Vorschaumodus ermöglicht eine Sammlung instabiler Features, die sich vor der Stabilisierung ändern können.
Weitere Informationen zu den Top-Level-Befehlen von Ruff finden Sie unter ruff help
. Weitere Informationen zu den Linting- bzw. Formatierungsbefehlen finden Sie ruff help check
und ruff help format
.
Ruff unterstützt über 800 Lint-Regeln , von denen viele von beliebten Tools wie Flake8, isort, pyupgrade und anderen inspiriert sind. Unabhängig vom Ursprung der Regel implementiert Ruff jede Regel in Rust als Erstanbieter-Feature neu.
Standardmäßig aktiviert Ruff F
Regeln von Flake8 zusammen mit einer Teilmenge der E
-Regeln und lässt alle Stilregeln weg, die sich mit der Verwendung eines Formatierers überschneiden, wie z. B. ruff format
oder Black.
Wenn Sie gerade erst mit Ruff beginnen, ist der Standardregelsatz ein guter Ausgangspunkt : Er fängt eine Vielzahl häufiger Fehler (z. B. nicht verwendete Importe) ohne Konfiguration ab.
Über die Standardeinstellungen hinaus implementiert Ruff einige der beliebtesten Flake8-Plugins und zugehörige Tools zur Codequalität neu, darunter:
Eine vollständige Auflistung der unterstützten Regeln finden Sie unter Regeln .
Beiträge sind willkommen und werden sehr geschätzt. Sehen Sie sich zunächst die Beitragsrichtlinien an.
Sie können uns auch auf Discord beitreten.
Haben Sie Probleme? Schauen Sie sich die vorhandenen Ausgaben auf GitHub an oder eröffnen Sie gerne eine neue .
Sie können auch auf Discord um Hilfe bitten.
Ruffs Linter stützt sich sowohl auf die APIs als auch auf Implementierungsdetails vieler anderer Tools im Python-Ökosystem, insbesondere Flake8, Pyflakes, Pycodestyle, Pydocstyle, Pyupgrade und Isort.
In einigen Fällen enthält Ruff eine „direkte“ Rust-Portierung des entsprechenden Tools. Wir danken den Betreuern dieser Tools für ihre Arbeit und für den Mehrwert, den sie der Python-Community geboten haben.
Ruffs Formatter basiert auf einer Abzweigung von Romes rome_formatter
und greift wiederum sowohl auf API- als auch auf Implementierungsdetails von Rome, Prettier und Black zurück.
Der Import-Resolver von Ruff basiert auf dem Import-Resolution-Algorithmus von Pyright.
Ruff wird auch von einer Reihe von Tools außerhalb des Python-Ökosystems beeinflusst, wie Clippy und ESLint.
Ruff ist der Nutznießer einer großen Anzahl von Mitwirkenden.
Ruff wird unter der MIT-Lizenz veröffentlicht.
Ruff wird von einer Reihe großer Open-Source-Projekte und -Unternehmen verwendet, darunter:
Wenn Sie Ruff verwenden, sollten Sie erwägen, das Ruff-Badge zur README.md
Ihres Projekts hinzuzufügen:
[ ![ 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 )
...oder 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
...oder als 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 >
Dieses Repository ist unter der MIT-Lizenz lizenziert