문서 | 운동장
Rust로 작성된 매우 빠른 Python 린터 및 코드 포맷터입니다.
CPython 코드베이스를 처음부터 린트합니다.
pip
를 통해 설치 가능pyproject.toml
지원Ruff는 단일 공통 인터페이스 뒤에 더 많은 기능을 통합하면서 대체 도구보다 훨씬 빠른 속도를 목표로 합니다.
Ruff는 Flake8(및 수십 개의 플러그인), Black, isort, pydocstyle, pyupgrade, autoflake 등을 대체하는 데 사용할 수 있으며 모든 개별 도구보다 수십 배 또는 수백 배 빠르게 실행됩니다.
Ruff는 다음과 같은 주요 오픈 소스 프로젝트에서 매우 적극적으로 개발 및 사용됩니다.
...그리고 더 많은 것들이 있습니다.
Ruff는 Astral의 지원을 받습니다. 출시 게시물이나 원본 프로젝트 발표를 읽어보세요.
FastAPI의 창시자인 Sebastián Ramírez :
Ruff는 너무 빠르기 때문에 실제로 실행 중인지 확인하고 코드를 확인하기 위해 코드에 의도적인 버그를 추가하는 경우도 있습니다.
GraphQL의 공동 창작자이자 Elementl의 창립자인 Nick Schrock :
Ruff가 판도를 바꾸는 이유는 무엇입니까? 주로 거의 1000배 더 빠르기 때문입니다. 문자 그대로. 오타가 아닙니다. 가장 큰 모듈(dagster 자체, 250k LOC) pylint에서는 M1의 4개 코어에 걸쳐 병렬화되는 데 약 2.5분이 소요됩니다. 전체 코드베이스에 대해 러프를 실행하는 데는 0.4초가 걸립니다.
Bokeh의 공동 창작자이자 Conda의 원저자인 Bryan Van de Ven :
Ruff는 내 컴퓨터의 flake8보다 ~150-200배 빠르며 전체 저장소를 스캔하는 데 ~20초가 아닌 ~0.2초가 걸립니다. 이는 로컬 개발자의 삶의 질을 엄청나게 향상시킵니다. 실제 커밋 후크로 추가할 정도로 속도가 빠르네요. 정말 대단합니다.
isort의 창시자 Timothy Crosley :
방금 첫 번째 프로젝트를 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를 린터로 실행하려면 다음 중 하나를 시도하십시오.
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
나머지 구성 옵션은 catch-all --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개 이상의 린트 규칙을 지원하며 , 그 중 다수는 Flake8, isort, pyupgrade 등과 같은 널리 사용되는 도구에서 영감을 받았습니다. 규칙의 출처에 관계없이 Ruff는 Rust의 모든 규칙을 자사 기능으로 다시 구현합니다.
기본적으로 Ruff는 E
규칙의 하위 집합과 함께 Flake8의 F
규칙을 활성화하여 ruff format
이나 Black과 같은 포맷터 사용과 겹치는 모든 스타일 규칙을 생략합니다.
방금 Ruff를 시작했다면 기본 규칙 세트는 시작하기 좋은 곳입니다 . 구성이 전혀 없는 상태에서 다양한 일반적인 오류(예: 사용되지 않은 가져오기)를 포착합니다.
기본값 외에도 Ruff는 다음을 포함하여 가장 인기 있는 Flake8 플러그인 및 관련 코드 품질 도구 중 일부를 다시 구현합니다.
지원되는 규칙의 전체 목록은 규칙 을 참조하세요.
기여를 환영하며 높이 평가됩니다. 시작하려면 기여 지침을 확인하세요.
Discord 에서도 참여할 수 있습니다.
문제가 있나요? GitHub 에서 기존 문제를 확인하거나 자유롭게 새 문제를 열어 보세요.
Discord 에 도움을 요청할 수도 있습니다.
Ruff의 linter는 Python 생태계의 다른 많은 도구, 특히 Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade 및 isort의 API와 구현 세부 정보를 모두 활용합니다.
어떤 경우에는 Ruff에 해당 도구의 "직접" Rust 포트가 포함되어 있습니다. 우리는 이러한 도구를 유지 관리하는 사람들의 작업과 Python 커뮤니티에 제공한 모든 가치에 대해 감사드립니다.
Ruff의 포맷터는 Rome의 rome_formatter
포크를 기반으로 구축되었으며 Rome, Prettier 및 Black의 API와 구현 세부정보를 모두 활용합니다.
Ruff의 가져오기 확인자는 Pyright의 가져오기 확인 알고리즘을 기반으로 합니다.
Ruff는 또한 Clippy 및 ESLint와 같은 Python 생태계 외부의 여러 도구의 영향을 받습니다.
Ruff는 수많은 기여자의 수혜자입니다.
Ruff는 MIT 라이선스로 배포됩니다.
Ruff는 다음을 포함한 여러 주요 오픈 소스 프로젝트 및 회사에서 사용됩니다.
Ruff를 사용하고 있다면 프로젝트의 README.md
에 Ruff 배지를 추가하는 것을 고려해 보세요.
[ ![ 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 라이선스에 따라 라이선스가 부여됩니다.