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 (parallelized by-default).
- 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.17-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a068bced7aff34173319931972fde3d7e68e3894915edac4e0f8c9b7bec7a226 |
|
MD5 | 874eb20e27260965d22409e73861f5ec |
|
BLAKE2b-256 | fed7741e229667d0038d004783286ea6fa4554ff7a3b52bfe9b26b0380462e56 |
Hashes for ruff-0.0.17-cp310-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3aba30e3aad77f260095ea1dbcf2834ab64d75133ff8d260625bb22887e2799 |
|
MD5 | c86e4ecf1131775531b04c32ac76ea78 |
|
BLAKE2b-256 | cad952cef313261a61931c4f3be228a774c5dad89f45042518d0f483864902ca |
Hashes for ruff-0.0.17-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3b067ed2bd3fd0d4be591ea9afc796c07706291d78efe5a8eda4172c4d43525c |
|
MD5 | 98da56126f824cf24f8989dbce2391f5 |
|
BLAKE2b-256 | fb3c92267e9b9336bb1ba9ba7f5e3b9028e57ee4d77f32f728992c23da69ab53 |
Hashes for ruff-0.0.17-cp310-cp310-musllinux_1_2_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 80fe80b12ea042b9f0d8e80608db400e0c8e419d74a4dcf8b3b4fea9ec03362f |
|
MD5 | f081d7f1c63aae236bb48375c8dc74ad |
|
BLAKE2b-256 | 237a96a4e5c51bab9538d9ee27a0eba95bd790d120bcc76a195417abbfb2cc81 |
Hashes for ruff-0.0.17-cp310-cp310-musllinux_1_2_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f3a399e4d211cdbec9229a89b1b7e77345eae881e9c3682fef7e90044de6a864 |
|
MD5 | be7e91544f638ec9054f6bbf79332614 |
|
BLAKE2b-256 | 4765cfd4e305851fdb94b7c8147d9d839ed83f9a93a941cc89d71e633a094642 |
Hashes for ruff-0.0.17-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bb485eb3e0ba0c19ffd14b533659448c1c5e2958171e818fc1bc42c76f3d99a |
|
MD5 | 7cfdb573d75dc3c5580352f2b3244e3b |
|
BLAKE2b-256 | 7c462cb84ccb0944c37208a2cea880ba8c6cb2a1752759771d385d6217de46b2 |
Hashes for ruff-0.0.17-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a90917b0e9d2f851294e445f0b898fa94051c4d9edcc1ab6d40bc1129fb9bb1e |
|
MD5 | 7ceaa73c001ae88869bb51350a8f1f1d |
|
BLAKE2b-256 | 40e874569b7b05ece82a9e298eed7e01b2ae18205cee88de0283d0647370d120 |
Hashes for ruff-0.0.17-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7cd7180893a3ed789c82838c8082fda074ba1cec46f383e255e696533f634be |
|
MD5 | 7b9496f7185c1225669c8c33aff72f56 |
|
BLAKE2b-256 | 90af2c5dfa97f6994cf462e2b1934662f730608eec7ccfd6b992bab1af002ce9 |
Hashes for ruff-0.0.17-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78f14cf1056ded6bda77162d7483e11a2f2a29763538422adaa5412654ff1a94 |
|
MD5 | 50fc6729a9986f87b6b6146154ac294d |
|
BLAKE2b-256 | d67d4d897311a299007b8542bfcd83dff9b09db6a7130f48ad3252e8ba3740b9 |
Hashes for ruff-0.0.17-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e608511d0349a6211a0a123744cc0960f88539dbf62a0b8a77e3ee483237a6da |
|
MD5 | c05e6b5540efbe9f15f8dec6daddaee6 |
|
BLAKE2b-256 | bc4408d68e219e2e7659991b467122f41326fde1e2e959107746ed7559f5e498 |
Hashes for ruff-0.0.17-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 522cacc6e550a7d59ead3b0ca65623582d51bfe32f6c780770ccf5d1bc3246cb |
|
MD5 | d4b29e59966511603c1ca96f80f3abee |
|
BLAKE2b-256 | 76a4dad616f277880963968d8a5e5719556f4ecadc7333c0da8bfb5060c5750c |
Hashes for ruff-0.0.17-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4e60d690898be3c3bf24387e67ac89496a97eb8814b8c0f0670ea43b6e83ee2 |
|
MD5 | 8ea1ca16d56c558fffbc300efedacdd2 |
|
BLAKE2b-256 | 2416e5c7cb9b77d1f64d94d507d0c3d7ef491a10dc75825f458cb1bb05ae41cf |
Hashes for ruff-0.0.17-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1349f4e5a4d53294fce92f42ecf881a73c180d71f14121461cac7d251abafd4 |
|
MD5 | 59f8c9016bcddeed41db28b03fddc2f4 |
|
BLAKE2b-256 | 9c0569872574ea3044cfbac4becef1c25c0b1227499c91c2232b83bad9bb104c |
Hashes for ruff-0.0.17-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f5694f9876cde21b95ad9c1691d0513617d2e88c0749f400b866505217fd5a0 |
|
MD5 | 1848ebc0edd29ac883a86e1954c9bbd5 |
|
BLAKE2b-256 | 3d235e519dd38ae42a75f8e6a952a3c5ea842804e2cb8c60a1d72807131d8aba |
Hashes for ruff-0.0.17-cp310-cp310-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fa56d385b31462e26a605477c626023b16fb5a399b619ba0966d0d2b8d88eca |
|
MD5 | d6d5a88dfb551cc6148edd132c0000ef |
|
BLAKE2b-256 | 103b4a6b289ab3ca80109402c15dd0fc83ef1c77572453b346a74ebc55666db5 |
Hashes for ruff-0.0.17-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ba403b8a5f38753ed3ba7ca16fb7c67eaee96a4e4a9e9709f3ad8cd3909012c |
|
MD5 | 96443bb5edb8221d9a77b4422ac8c751 |
|
BLAKE2b-256 | d8a73ccc344a2b228a15b52217ed2a2982214ad77684745c3e09ace2b1f8e9bf |
Hashes for ruff-0.0.17-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d3fec0e9e8f285324127b97c55b525fe61e8e16e93e1a03d34aba80e3aff9f21 |
|
MD5 | 00f34fe3363a0eff10bdabf13fbb6706 |
|
BLAKE2b-256 | 8039db6441f33216e25e5dba811e9d908cff898df7c9930006c735ba6578dd65 |
Hashes for ruff-0.0.17-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a390b4657cc1eebd9bb0e581da768aa557b1157f5eeed6fc8b5b920991061b04 |
|
MD5 | 32e9e28fc8e1ef86ec739d8170bda573 |
|
BLAKE2b-256 | 2b277449e2a8bca1957c0e2d57316ca8fdcdf8d83277b23d50a33bdded703aa6 |
Hashes for ruff-0.0.17-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 865114aa655dc54e5699f18b258a33a15a36da915de4936d7a458425e7f6351d |
|
MD5 | cd7ae4a72a90f3b4b8b92ff3b0614cdc |
|
BLAKE2b-256 | f373e87e31367fe7af0a027672e49703b61ea6566912d09e34a8e3e43bce3455 |
Hashes for ruff-0.0.17-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9c1ba3383995091ce6f3618e89f1bb0ed5caa730f64bb79a1c60184682dc5c3 |
|
MD5 | 77a1757963528b1650be267adee1293f |
|
BLAKE2b-256 | ad3d7d71456c7e1c543ed223b400a2e962a344b5467a27e196c4dd6f2d1d30c3 |
Hashes for ruff-0.0.17-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b00be13abaf107c30b8bcaf2ac89dc2b3abd164728c229339910211c05e8c43 |
|
MD5 | a7db0e3a63cb86f4da746abafd5d0016 |
|
BLAKE2b-256 | c235c3e2a3c3690e732860342b16e606795e977d87a90176ed1dae13c001ee86 |
Hashes for ruff-0.0.17-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef57186452c0cfe71f09dac434bda0f1a804808f92221142adb9de28c3f422e6 |
|
MD5 | 646b6fd8b66afcba9fbbf0b83f9e96b0 |
|
BLAKE2b-256 | 2e691d4a2819146458d478e8c8a194452da263ab60202083d8eba02307fde216 |
Hashes for ruff-0.0.17-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bab716debcab46d9a1d7c8d00e2acf2b48ff28ec519b2b4c0eba873236782c21 |
|
MD5 | 696bd31481872c6e1164822af28d01db |
|
BLAKE2b-256 | aa9f7235c23ed12dfd44823d3a127d5654cc2fbfbe3daa1aca00c43ad2ccd519 |
Hashes for ruff-0.0.17-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71cb773b19240f1be64c5f71aa2ad52b9f44fde1605c2c2f4089a5d61cb552d2 |
|
MD5 | ba781329ad83bd318b1ec73cd2d6bb5f |
|
BLAKE2b-256 | 498b8d2de1c9f7e2056bd4edaea393d6ad3494e75e99136cf127402afb4c496c |
Hashes for ruff-0.0.17-cp39-cp39-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e6f24c3746d199bdb0d47149ed5353a41f0192630911396822fda0f8a6feaa0b |
|
MD5 | 8ff32c5f26964d079d851d96ad5b6649 |
|
BLAKE2b-256 | d34ec854d4587c180936b33eac57344b11f52564878d2939fd6d9d842fa6e5ae |
Hashes for ruff-0.0.17-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f0d0e8058d903b8fe899e04e1a957127ca97452553cf70ba9b4d1b277f034ad1 |
|
MD5 | 14bc7835e7322c84634954f251d5ee30 |
|
BLAKE2b-256 | d03fcd9d27f2dbbd4975c7880d8284f893ea99cf73c646f453b9cef1b3924db5 |
Hashes for ruff-0.0.17-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7433f20d39a3819e322a3497dce037c6110f9588ec51ba136a938109dd31e71 |
|
MD5 | b7c1399767a8f51e30c09e685c1822b3 |
|
BLAKE2b-256 | 8961cec1cd7093eea58e083060fc66c3fcf758737785a21b752fc568f57eabab |
Hashes for ruff-0.0.17-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d45439cbe73332a064306c39528d6bbf4856abb6d377ad8244b6e74a737daaa |
|
MD5 | 0da0e0d7a145f05dc68b52168f88b1f3 |
|
BLAKE2b-256 | e296949c17bed22816136d8e0456a242059da202e316ca4510715560c026d0d8 |
Hashes for ruff-0.0.17-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3a9f2fb8b3bac67d0fa9e50411ab424a863e4bc29a3336a046cc38f06d3ec17f |
|
MD5 | 29e8349199425a6f80c991e6c72b2574 |
|
BLAKE2b-256 | 9f38e51bff666939e38155ef12930e6c1d4970f5a28c7f1ff3867e97b00a4cd0 |
Hashes for ruff-0.0.17-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4933e275f0c3af3a78ecf1f9a4e12cc0426cd76398c7e904786f99c1ea8a0dd |
|
MD5 | e782adff3b998e3ff137b25a4fee1435 |
|
BLAKE2b-256 | 8f8bac8d7a1cce151c74fa9458f0297ca6fc287f9fe1a57fe710f99de970bfdb |
Hashes for ruff-0.0.17-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe0c047d6fc74b55fcd1ac4f18110500ba871de2014039e4838ed7444d3459ff |
|
MD5 | aa38676b1169a1458b6c77510753ccc0 |
|
BLAKE2b-256 | fffa0cf5c91b2d415416ef0d534a8f19bdc07d11a52fd54aface524d006be1ce |
Hashes for ruff-0.0.17-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7be31e77c1f98d9d02a7f6f2d4c05e8236cd9c82d0c3356b083162a011fc4d23 |
|
MD5 | 0045748deaa22935dcfbed3da040cc0f |
|
BLAKE2b-256 | c16b15e1c6744216236a3a08a8e40e318c329f86febdee7a1d62e3c449d75009 |
Hashes for ruff-0.0.17-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 889aa57c771140ec6b17e15af8308e88e43a07b7369b97cb0426e1393e3d10b5 |
|
MD5 | 6847882bc27115022b9fbb7871e73d4a |
|
BLAKE2b-256 | 093f657daee09a7412bda8af1963d6dd1b4adfdbc0e2d37c7261984fc4953e19 |
Hashes for ruff-0.0.17-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8527c8aacdd0e911c6f7d6f1b109a17e68300ac0f255ccce73e748bb8835c722 |
|
MD5 | 3ba7939347985e88b02125d983fbca95 |
|
BLAKE2b-256 | 323d13114ef5793e43fd5c8ee17047fbdc86e9eacb81f708c0e01ca9d5db773f |
Hashes for ruff-0.0.17-cp38-cp38-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db04c29f114c68f447aeec23f9be6118ea11a18a2444416cb4afb0fd918e50db |
|
MD5 | bc4bd7c931242608d4a702c6355a7be4 |
|
BLAKE2b-256 | f3a9e5a048d209e246b3702a23540b1e09faa79b313b1b23f27993e33df3b01a |
Hashes for ruff-0.0.17-cp37-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c5900fd09baa2c7a4aecbdc754d3a43f2842906ee571812fa3eb28b8e7973a5 |
|
MD5 | 0dfe6826e2a6c1412823029326f29212 |
|
BLAKE2b-256 | 9ca9dacfff99065b0588ff9cf07411d7bbc8a167d1542d92a7e46f5825e262fa |
Hashes for ruff-0.0.17-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5bed7beec36834e6fc40a03af92bc0da67599c70fbe24d8d820a1a2110b25eaf |
|
MD5 | c5d23a1ff280bc6c0af78e73e5b3a0fa |
|
BLAKE2b-256 | e21a1ab955830e84dcad9f606954d5b1094e186de144a2ad37247aa37145cbcd |
Hashes for ruff-0.0.17-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27d1bd7c71a90522e383853e411fcb402ccdcaf8778c6e0d54359153772f7870 |
|
MD5 | 4cd9da105f8a541a9ac345942d56158c |
|
BLAKE2b-256 | bdf712a3cfa5b88485ecdc724d0e915a8ebe4dfebfa94422855a445850564d01 |
Hashes for ruff-0.0.17-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6e72d62bd47f086d14ea5796ea18d1b98089a839dad693afa471a1fcdb6ae0d |
|
MD5 | e0aff409f6d1eb67ad81e87a1331c34a |
|
BLAKE2b-256 | ed54ad7286c9e136260eaf8d6236202384dfe71a884a7b31288e129a43c33cb7 |
Hashes for ruff-0.0.17-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | febfbe4fa02e680b93b3fc2dcb0ffe5d601435c9719a51e35fe51fff1d0cc2c6 |
|
MD5 | 5b4dd32e886bc81aad68b69ea1107806 |
|
BLAKE2b-256 | 3fa9f0cc3416b6f2e3755c8b37271112c609dfdf862b2825d86f4fc926eee037 |
Hashes for ruff-0.0.17-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 52110ed886d674497531d44ead5fa2fe99be930adfc9cec4b1f39409043efb13 |
|
MD5 | b2c2a4d12ef4205b583ee516dc8f2a79 |
|
BLAKE2b-256 | 32e52c41a62d58763948fa332619226cb11ded2ec161c678d70b7991b839ecf5 |
Hashes for ruff-0.0.17-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | edbaf1c7f6b6483a206e549026f03ef7e04e480b5204437e21370de508dcf736 |
|
MD5 | 9d1bc27917d02aef828a27db39d199d6 |
|
BLAKE2b-256 | 70e9353db015927b6336bffbb7fe16af3bf76e860ab0fbddd66bf0a6995a2bfa |
Hashes for ruff-0.0.17-cp37-cp37m-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91019d271c223a4c562dbc2fbf2a2a96157524999a1173a4c858816d0c1bb9e7 |
|
MD5 | c2271f832dd68135ff49b10cd9e14130 |
|
BLAKE2b-256 | 1313f68c059cafb95122214c2defac7005c8a5ce278c7f1768d6849c167df07a |
Hashes for ruff-0.0.17-cp37-cp37m-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b708d650c2ba25458d9e735c51981b687bf6747a4b28403eb7f6bae1aa93cfcf |
|
MD5 | fd26e7059ad49610a08ba9135989b709 |
|
BLAKE2b-256 | 2050470c8688e96fecac2096205cb45438676f6277b9c713a0aa1c4e633af503 |