An extremely fast Python linter, written in Rust.
Project description
ruff
An extremely fast Python linter, written in Rust.
Linting the CPython codebase from scratch.
Major features:
- 10-100x faster than your current linter.
- Installable via
pip
. - Python 3.10 compatibility.
- ESLint-inspired cache semantics.
- TypeScript-inspired
--watch
semantics. pyproject.toml
support.
ruff is a proof-of-concept and not yet intended for production use. It supports only a small subset of the Flake8 rules, and may crash on your codebase.
Installation and usage
Installation
Available as ruff on PyPI:
pip install ruff
For now, wheels are only available for macOS (on Python 3.7, 3.8, 3.9, and 3.10). If you're using a
different operating system or Python version, you'll need to install the Rust toolchain
prior to running pip install ruff
. (This is an effort limitation on my part, not a technical
limitation.)
Usage
To run ruff, try any of the following:
ruff path/to/code/to/check.py
ruff path/to/code/
ruff path/to/code/*.py
You can run ruff in --watch
mode to automatically re-run on-change:
ruff path/to/code/ --watch
Configuration
ruff is configurable both via pyproject.toml
and the command line.
For example, you could configure ruff to only enforce a subset of rules with:
[tool.ruff]
line-length = 88
select = [
"F401",
"F403",
]
Alternatively, on the command-line:
ruff path/to/code/ --select F401 F403
See ruff --help
for more:
ruff
A Python linter written in Rust
USAGE:
ruff [OPTIONS] <FILES>...
ARGS:
<FILES>...
OPTIONS:
-e, --exit-zero Exit with status code "0", even upon detecting errors
-h, --help Print help information
--ignore <IGNORE>... Comma-separated list of error codes to ignore
-n, --no-cache Disable cache reads
-q, --quiet Disable all logging (but still exit with status code "1" upon
detecting errors)
--select <SELECT>... Comma-separated list of error codes to enable
-v, --verbose Enable verbose logging
-w, --watch Run in watch mode by re-running whenever files change
Development
ruff is written in Rust (1.63.0). You'll need to install the Rust toolchain for development.
Assuming you have cargo
installed, you can run:
cargo run resources/test/src
cargo fmt
cargo clippy
cargo test
Deployment
ruff is distributed on PyPI, and published via maturin
.
For now, releases are cut and published manually:
for TARGET in x86_64-apple-darwin aarch64-apple-darwin
do
maturin publish --username crmarsh --skip-existing --target ${TARGET} -i \
/usr/local/opt/python@3.7/libexec/bin/python \
/usr/local/opt/python@3.8/libexec/bin/python \
/usr/local/opt/python@3.9/libexec/bin/python \
/usr/local/opt/python@3.10/libexec/bin/python
done
Benchmarking
First, clone CPython. It's a large and diverse Python codebase, which makes it a good target for benchmarking.
git clone --branch 3.10 https://github.com/python/cpython.git resources/test/cpython
Add this pyproject.toml
to the CPython directory:
[tool.linter]
line-length = 88
exclude = [
"Lib/ctypes/test/test_numbers.py",
"Lib/dataclasses.py",
"Lib/lib2to3/tests/data/bom.py",
"Lib/lib2to3/tests/data/crlf.py",
"Lib/lib2to3/tests/data/different_encoding.py",
"Lib/lib2to3/tests/data/false_encoding.py",
"Lib/lib2to3/tests/data/py2_test_grammar.py",
"Lib/sqlite3/test/factory.py",
"Lib/sqlite3/test/hooks.py",
"Lib/sqlite3/test/regression.py",
"Lib/sqlite3/test/transactions.py",
"Lib/sqlite3/test/types.py",
"Lib/test/bad_coding2.py",
"Lib/test/badsyntax_3131.py",
"Lib/test/badsyntax_pep3120.py",
"Lib/test/encoded_modules/module_iso_8859_1.py",
"Lib/test/encoded_modules/module_koi8_r.py",
"Lib/test/sortperf.py",
"Lib/test/test_email/torture_test.py",
"Lib/test/test_fstring.py",
"Lib/test/test_genericpath.py",
"Lib/test/test_getopt.py",
"Lib/test/test_grammar.py",
"Lib/test/test_htmlparser.py",
"Lib/test/test_importlib/stubs.py",
"Lib/test/test_importlib/test_files.py",
"Lib/test/test_importlib/test_metadata_api.py",
"Lib/test/test_importlib/test_open.py",
"Lib/test/test_importlib/test_util.py",
"Lib/test/test_named_expressions.py",
"Lib/test/test_patma.py",
"Lib/test/test_peg_generator/__main__.py",
"Lib/test/test_pipes.py",
"Lib/test/test_source_encoding.py",
"Lib/test/test_weakref.py",
"Lib/test/test_webbrowser.py",
"Lib/tkinter/__main__.py",
"Lib/tkinter/test/test_tkinter/test_variables.py",
"Modules/_decimal/libmpdec/literature/fnt.py",
"Modules/_decimal/tests/deccheck.py",
"Tools/c-analyzer/c_parser/parser/_delim.py",
"Tools/i18n/pygettext.py",
"Tools/test2to3/maintest.py",
"Tools/test2to3/setup.py",
"Tools/test2to3/test/test_foo.py",
"Tools/test2to3/test2to3/hello.py",
]
Next, to benchmark the release build:
cargo build --release
hyperfine --ignore-failure --warmup 1 \
"./target/release/ruff ./resources/test/cpython/ --no-cache" \
"./target/release/ruff ./resources/test/cpython/"
Benchmark 1: ./target/release/ruff ./resources/test/cpython/ --no-cache
Time (mean ± σ): 353.6 ms ± 7.6 ms [User: 2868.8 ms, System: 171.5 ms]
Range (min … max): 344.4 ms … 367.3 ms 10 runs
Benchmark 2: ./target/release/ruff ./resources/test/cpython/
Time (mean ± σ): 59.6 ms ± 2.5 ms [User: 36.4 ms, System: 345.6 ms]
Range (min … max): 55.9 ms … 67.0 ms 48 runs
To benchmark the ecosystem's existing tools:
hyperfine --ignore-failure --warmup 1 \
"pylint --recursive=y resources/test/cpython/" \
"pyflakes resources/test/cpython" \
"autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython" \
"pycodestyle resources/test/cpython" \
"pycodestyle --select E501 resources/test/cpython" \
"flake8 resources/test/cpython" \
"flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython" \
"python -m scripts.run_flake8 resources/test/cpython" \
"python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501"
In order, these evaluate:
- Pylint
- PyFlakes
- autoflake
- pycodestyle
- pycodestyle, limited to the checks supported by ruff
- Flake8
- Flake8, limited to the checks supported by ruff
- Flake8, with a hack to enable multiprocessing on macOS
- Flake8, with a hack to enable multiprocessing on macOS, limited to the checks supported by ruff
(You can poetry install
from ./scripts
to create a working environment for the above.)
Benchmark 1: ./target/release/ruff ./resources/test/cpython/ --no-cache
Time (mean ± σ): 566.9 ms ± 36.6 ms [User: 2618.0 ms, System: 992.0 ms]
Range (min … max): 504.8 ms … 634.0 ms 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 2: ./target/release/ruff ./resources/test/cpython/
Time (mean ± σ): 79.5 ms ± 2.3 ms [User: 330.1 ms, System: 254.3 ms]
Range (min … max): 75.6 ms … 85.2 ms 35 runs
Warning: Ignoring non-zero exit code.
Benchmark 3: pylint --recursive=y resources/test/cpython/
Time (mean ± σ): 27.532 s ± 0.207 s [User: 26.606 s, System: 0.899 s]
Range (min … max): 27.344 s … 28.064 s 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 4: pyflakes resources/test/cpython
Time (mean ± σ): 28.074 s ± 0.551 s [User: 27.845 s, System: 0.212 s]
Range (min … max): 27.479 s … 29.467 s 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 5: autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython
Time (mean ± σ): 4.986 s ± 0.190 s [User: 43.257 s, System: 0.801 s]
Range (min … max): 4.837 s … 5.462 s 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 6: pycodestyle resources/test/cpython
Time (mean ± σ): 42.400 s ± 0.211 s [User: 42.177 s, System: 0.213 s]
Range (min … max): 42.106 s … 42.677 s 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 7: pycodestyle --select E501 resources/test/cpython
Time (mean ± σ): 14.578 s ± 0.068 s [User: 14.466 s, System: 0.108 s]
Range (min … max): 14.475 s … 14.726 s 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 8: flake8 resources/test/cpython
Time (mean ± σ): 76.414 s ± 0.461 s [User: 75.611 s, System: 0.652 s]
Range (min … max): 75.691 s … 77.180 s 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 9: flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython
Time (mean ± σ): 75.960 s ± 0.610 s [User: 75.255 s, System: 0.634 s]
Range (min … max): 75.159 s … 77.066 s 10 runs
Warning: Ignoring non-zero exit code.
Benchmark 10: python -m scripts.run_flake8 resources/test/cpython
Time (mean ± σ): 13.536 s ± 0.584 s [User: 90.911 s, System: 0.934 s]
Range (min … max): 12.831 s … 14.699 s 10 runs
Benchmark 11: python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501
Time (mean ± σ): 12.781 s ± 0.192 s [User: 89.525 s, System: 0.882 s]
Range (min … max): 12.568 s … 13.119 s 10 runs
Summary
'./target/release/ruff ./resources/test/cpython/' ran
7.13 ± 0.50 times faster than './target/release/ruff ./resources/test/cpython/ --no-cache'
62.69 ± 3.01 times faster than 'autoflake --recursive --expand-star-imports --remove-all-unused-imports --remove-unused-variables --remove-duplicate-keys resources/test/cpython'
160.71 ± 5.26 times faster than 'python -m scripts.run_flake8 resources/test/cpython --select=F831,F541,F634,F403,F706,F901,E501'
170.21 ± 8.86 times faster than 'python -m scripts.run_flake8 resources/test/cpython'
183.30 ± 5.40 times faster than 'pycodestyle --select E501 resources/test/cpython'
346.19 ± 10.40 times faster than 'pylint --recursive=y resources/test/cpython/'
353.00 ± 12.39 times faster than 'pyflakes resources/test/cpython'
533.14 ± 15.74 times faster than 'pycodestyle resources/test/cpython'
955.13 ± 28.83 times faster than 'flake8 --select=F831,F541,F634,F403,F706,F901,E501 resources/test/cpython'
960.82 ± 28.55 times faster than 'flake8 resources/test/cpython'
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for ruff-0.0.18-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74d14ff072ad8f081e4d440a5f0cc102dfcb88c6d75c1219eb799e73675fcaa7 |
|
MD5 | 128a6cfbb59dbcb16e393e6a8b96a6e1 |
|
BLAKE2b-256 | b6360e8e710cd9c316d4315c89ccc2b5ca1a85665eb67525beb19c7ce5c46bb4 |
Hashes for ruff-0.0.18-cp310-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6407d7193815fc9274016d90ba095323d3867653fa0b1b7d694c775ee3402715 |
|
MD5 | d9910cd1366f416e95f6f5b14b1297aa |
|
BLAKE2b-256 | 918335cf06a01309dcf45d80f458ac464cba13895ad21ca485b6f3055643609c |
Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e29c6313844d6b000b1b02122f39a6c1c3979017fde67234b6fbbbf766ddddac |
|
MD5 | c1bb160c963c8f6d7a010c8499d60b6b |
|
BLAKE2b-256 | 2f4886770c7cca948414b72f10b657abb17bd2a4dfd8d81e34ae4f57719bec87 |
Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 271b7b5148d2fa328d315d30562f4f23765e5738311823477e925e95a50051a2 |
|
MD5 | add72a95ac32e733a494f9737f190129 |
|
BLAKE2b-256 | 16cbb2ccd8cbf4ac53e0110e6178dd635558c3eba2de372b645eeda50f901efc |
Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 510a651c721c08d2c9b9d9befeb88fef64d3437f000c1cf45ae6bc21d0f6ec99 |
|
MD5 | b6ec4455a918c20b8f3c5e5a9f52fd2a |
|
BLAKE2b-256 | e3cb9abe7ff6bfb1ea7d466319d6c197eee9bf8c06d06043a5d8360da1557d3b |
Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ad65a978c5e38ec626b15052025d2dc40039964d6942a4d1d7dbf79098fb8af |
|
MD5 | fee31280589789abd6a0b332786247bd |
|
BLAKE2b-256 | 9f047f0d35a3c0b145c95d1af27639239f1fd79ee00708b7760e4a7a5431ef0e |
Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2b3f2c7951c70cf050fa48e5960bbfba312d4f0f4512a798bb9e976658ecd85c |
|
MD5 | 873208af4749052c564bad1433860ec1 |
|
BLAKE2b-256 | 3f51eab09cc5c651078195a607c774b0d4e7535572484d5b220c092d5dc7a39b |
Hashes for ruff-0.0.18-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f12dcfca268d31de2450b7f9920c6eb59553cc32fa7df891192c9be9e9b98bfe |
|
MD5 | 1a2f22f8fb914212696b8bd62dc0d859 |
|
BLAKE2b-256 | c9527c87a11ba41c146603e36ba4dac3b584f879b5e4af3e4c8ae2ca1cebf618 |
Hashes for ruff-0.0.18-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bac22a8f611d9533b69ae1a9ab08b042083effec1b12f6ca5f5c099e1f577299 |
|
MD5 | f9dec1583b7a2e7d1a93de697a9f944a |
|
BLAKE2b-256 | 907df79b0fcf0ca5cdc91c9012751978470d490128ffb1031719e48176a115e6 |
Hashes for ruff-0.0.18-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 459f9d94131ab77bb6603e2cd241c9320ff689742e8c789a32469e4c206156f5 |
|
MD5 | bee90c7835792619d1893a1863801694 |
|
BLAKE2b-256 | 013ad64ac7cce55707e9736ded0f393c57f7d81ac3579e30a2d4db3121cb7062 |
Hashes for ruff-0.0.18-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e95c32653fdfa87e19c24b88e13de09bfdd32bbd301f7c02763dd7934eddc463 |
|
MD5 | a9643fde238b8ff4f958058381feb23e |
|
BLAKE2b-256 | d27fa70660198652c298bcb9f377530793d9fe63d511f4f09054991541976a54 |
Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c61953a6ad7f5a3e4951df445d743a35a7188a5227c185aaacc60d8730289007 |
|
MD5 | e9932557a18ed632caefac06f18abbce |
|
BLAKE2b-256 | b4f62a3d4a22eda1f570de4704bd1fb7e47ae70cdf4a05bf172de1b99bfd3f0a |
Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 65a9b425bd41f1e273cc9d77a099c5f11e07133b0d66404e695a919071fbcced |
|
MD5 | fd242dc0f54c4126c1e4d8ea7b34b8fc |
|
BLAKE2b-256 | eb3876a20b9c72dc1dabdff6f128072746a1aaed9d5c7b31694ff349df54ab10 |
Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0731789c088713764d43c690f6d2b2275f1a0014c7db4a319af68435a4ad4e4d |
|
MD5 | d17067cc8ffdec30c67dac1a4724330a |
|
BLAKE2b-256 | 4b29d924d3ce91b5f5601481d912a6c43a373b244670699ed2bb760887f85b96 |
Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c907a6f729b4194602ce5b49ab25c0a341aa89a333e9310aba7944dec04819c |
|
MD5 | d1ee0bc69864253e30b8e35ad8ca26ce |
|
BLAKE2b-256 | 0a97b6299c46c194c6eaf17169cf4cef849ff5e4d430ad2b6a9d880254afd263 |
Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 30c04b0ca4fe22ab585fe8b5e4fae2401413b5763e06d0e47a203dabdc3ba08b |
|
MD5 | 7872fc910b9f6430db2813f3c149dd64 |
|
BLAKE2b-256 | 1233878859c581de1532a218e30c0872605a2545349d1d08e668de49abf0d661 |
Hashes for ruff-0.0.18-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 563eb3371cf6f08738f0f246935173de27ab35f834a718fed8a3aa24ac75a980 |
|
MD5 | 428a19d57d2219696811d2f599f679c3 |
|
BLAKE2b-256 | 4065a9259acbe9bee1b58352984b59b9c6b9dc7cdd263fb2620de9c3a0ea5f9f |
Hashes for ruff-0.0.18-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84c237c217778451e9a0d20c7938af5acca27033d9c4d9b90de280e17d058c9d |
|
MD5 | 98395bfce618a64c8f1c37a1b81c3639 |
|
BLAKE2b-256 | 91fcb0e6056dd442815827660926e0cefa8afa1c5226f4536e9a842208d7cb28 |
Hashes for ruff-0.0.18-cp39-cp39-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fcbd1494509350454419a52a607307add3108ce49864ef64e2e061767a92b78 |
|
MD5 | f07f30a207c5251711caf814fdfef55c |
|
BLAKE2b-256 | 5fe51d6059c89708783fd6ab423ee53aceb0ac7d27fd0659383574f316ab41ae |
Hashes for ruff-0.0.18-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5b7b2079f04f4ae7ad247aa3e9cfc0b2e917f69498b72c95f2625ad58a95c21 |
|
MD5 | de90673432289dbf7861323293997a11 |
|
BLAKE2b-256 | 1892bfb61f1f5a88498bff29e00e0f42a173e370e0d52de7eb4328d099217f4a |
Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5bcff208ad0cf44f8f300676853f9fac7dde4fc6bd76ebee502d1e32cec54c2e |
|
MD5 | d46450baa26d8415314c86d24b82f9c6 |
|
BLAKE2b-256 | d3c4cfc9aa1fca7441850d68d353439c5e13cd65ab2c6918b9bf5b05d38d0db7 |
Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ecfe3eac7d63600039eeedf248aa1c87933a8cbbf17524ad78d53b8ce52e0bd |
|
MD5 | fc0f0858cab71dfa1b0d5eb79be488c6 |
|
BLAKE2b-256 | 271bf1b99ac404672e9c6f403656a1b869192f652d0ae2219abc908d6ef5967e |
Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 98d78cfec84aed6c5518ae3b46ca2683e2bc1859f2389ac50dcd4fbc1b86d1c2 |
|
MD5 | 524fd2161e4e025b9bd2680d3e3354c5 |
|
BLAKE2b-256 | cfa494177a0f3c9496fbdb636335666c18abe8054452dae8bf17f9054bc7867a |
Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0248375e1665485d8cd3b247af49456fe9317f6f2e86104529cb297106ac6fa |
|
MD5 | 9bbbfa883099e585f3ef8fbf8887a041 |
|
BLAKE2b-256 | bde3ea3ed56ba2ff08b42f30053dbed599a30fdee18815b13f13aa72bcdd98a1 |
Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41ae06d255f1b5a27f42db927561cb7a26ee9f6730be57a6f1be5c5b9eca286c |
|
MD5 | c11159a730f8d0e34efb010bc765cf7b |
|
BLAKE2b-256 | 6b51484173c466d8f64e82745132ff6d9dc3debd3f3301712c1babbecf808fd3 |
Hashes for ruff-0.0.18-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 13d16be5e6f8d2949f51553fd0d4265a966b25877df2c9477efa41283d230f00 |
|
MD5 | 8d7bb701c5bd8e431c6ffe07a4b58398 |
|
BLAKE2b-256 | cc994545b6baa0724ee966dc33570cdcc6f5d0e9921a0cf603e539f77c94bc82 |
Hashes for ruff-0.0.18-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab8d40d4f50f925630668cc9176debade659becb2c30b17d66195258dd44ae22 |
|
MD5 | d90ea00558b5a0795c65ea662ef5c63b |
|
BLAKE2b-256 | e54cf2199c2e2277b838c8215f3ab7497b467da5cb6b6ae13e4cd4d8c6543258 |
Hashes for ruff-0.0.18-cp38-cp38-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e303301050f8aa1b40759ecb33ec5a927dfd3144d1df931cd6b68b32f58aea9 |
|
MD5 | 74b2c5f6c4ca386a41645369df2d57e4 |
|
BLAKE2b-256 | 33035da9b17cb93b7f7a23dec613f13d808b8003300f1c4b4f0c9fd4a60d7a0e |
Hashes for ruff-0.0.18-cp37-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60fee0616ccedf4ade8577491b445465b8dc07004b5a670e60ae5be0e1d0a72a |
|
MD5 | 956ae3ca0a6d9be91ba99b7ba643d022 |
|
BLAKE2b-256 | 215100cd9963d486aac87b54398fe659f6eb0ce5f2f49e3898b26d49cb476986 |
Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 625c368bef294837f17e78528aa4fdd829d6d08cef81ae0efe5a6bf071c6ae63 |
|
MD5 | 64fc3b2b3ecc063bdfabb8f6ab08a558 |
|
BLAKE2b-256 | 0b464c9c7308971602ac1bf1ebf03bf70c08a4878a9d3ab97e3f4352543dff85 |
Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d83eff5dff39b2740310ec34d1045c885d4a4377beccf01c532f1e244c8e3a06 |
|
MD5 | 89a73ad0ec9ce3b42510badecd9086e9 |
|
BLAKE2b-256 | aa2b95bab9b48be6837a8ed63a5f956f179a07c7368f3760c4cb74f1c2de2ed6 |
Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 846877276776480285f30b8242ef755c7de7117d7b1b9db845943bb30d61b374 |
|
MD5 | 2a33cf78aa8d6f1720af3948a100d390 |
|
BLAKE2b-256 | ce1c67f4b928c726212e6ffbf7469f15848d8d68e104e48f305cea18e810ea9c |
Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bea3f58827c8e36ce31005b8d7913e2fa39442a0f135985e3550cc82568b8601 |
|
MD5 | 3fa3cf633efc0d7578251620711adf1b |
|
BLAKE2b-256 | d38609b3bbc58ccc9129b85d935fa34421a155099cb42d4c6c79ea2add152c04 |
Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dc17d49d9533d290d7d64800c514dfdf5b219c9b7144f437f8f4e4e9769f085c |
|
MD5 | 1400a033d2dbe76776886b9aaed53486 |
|
BLAKE2b-256 | 83e489c0f4641144eceea7c7c29bc25b39fc9ef7d7c074e300458557d9f45bce |
Hashes for ruff-0.0.18-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1db098d99e9a71a409af310b2962546aec1bfb2e91fdf119f52facff12c9f0c9 |
|
MD5 | 51ec80d1575db76613dec68f09579c81 |
|
BLAKE2b-256 | b3059eeab287a39549dbce00539a41242e1d702ae235adad86e20dc8e3878f0c |
Hashes for ruff-0.0.18-cp37-cp37m-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 310cbf1c9a116c70f4751e17709c682e145e42851e093ad136960ecbf76014eb |
|
MD5 | 43deebd3f16ac5aeeeac43fe3aa34253 |
|
BLAKE2b-256 | 8b247a4dc19bec10167e3c99861c129817f164f198a748da23498455bdc7e0f9 |