Technologia

Ulepsz swój styl kodowania w Pythonie dzięki Ruff

  • 20 listopada, 2023
  • 4 min read
Ulepsz swój styl kodowania w Pythonie dzięki Ruff


Ulepsz swój styl kodowania w Pythonie dzięki Ruff
Zdjęcie autorstwa redaktora

Ruff to niezwykle szybki linter i formater Pythona napisany w Rust, którego celem jest zastąpienie i ulepszenie istniejących narzędzi, takich jak Flake8, Black i isort. Zapewnia 10-100x większą wydajność przy zachowaniu parzystości dzięki ponad 700 wbudowanym regułom i ponownej implementacji popularnych wtyczek.

Ulepsz swój styl kodowania w Pythonie dzięki Ruff
Statystyki z Ruffa | Linting bazy kodu CPython od zera

Ruff obsługuje nowoczesny Python ze zgodnością z wersją 3.12 i `pyproject.toml`. Oferuje także automatyczną obsługę poprawek, buforowanie i integrację edytorów. Ruff jest przyjazny dla monorepo i używany w dużych projektach typu open source, takich jak Pandas, FastAPI i nie tylko. Łącząc szybkość, funkcjonalność i użyteczność, Ruff integruje linting, formatowanie i automatyczne poprawianie w ujednoliconym narzędziu, które jest o rząd wielkości szybsze niż istniejące opcje.

Możemy łatwo zainstalować `ruff` za pomocą PIP.

Aby sprawdzić, jak łatwo i szybko można uruchomić Ruff, możemy skorzystać z repozytorium DagHub kingabzpro/Yoga-Pose-Classification. Możesz go sklonować lub użyć własnego projektu do sformatowania.

Ulepsz swój styl kodowania w Pythonie dzięki Ruff
Struktura projektu

Najpierw uruchomimy linter nad naszym projektem. Możesz także uruchomić linter na pojedynczym pliku, zastępując „.” z lokalizacją pliku.

Warto przeczytać!  Wyprzedaż telefonów 5G: do 35% zniżki na iPhone'y Apple, OnePlus Nord, Samsung Galaxy i inne telefony komórkowe |

Ulepsz swój styl kodowania w Pythonie dzięki Ruff

Ruff zidentyfikował 9 błędów i 1 błąd możliwy do naprawienia. Aby naprawić błąd, użyjemy flagi –fix.

Jak widać, naprawiono 1 naprawialny błąd.

Ulepsz swój styl kodowania w Pythonie dzięki Ruff

Do sformatowania projektu użyjemy polecenia `ruff format`.

$ ruff format .
>>> 3 files reformatted

Linter i formater Ruffa dokonały wielu zmian w kodzie. Ale dlaczego potrzebujemy tych narzędzi? Odpowiedź jest prosta – są korzystne w egzekwowaniu standardów i konwencji kodowania. Dzięki temu zarówno Ty, jak i Twój zespół możecie skoncentrować się na istotnych aspektach kodu. Co więcej, pomagają poprawić jakość, łatwość konserwacji i bezpieczeństwo naszego kodu.

Ulepsz swój styl kodowania w Pythonie dzięki Ruff
Gif autorstwa autora

Aby wykorzystać w projekcie Ruff for Jupyter Notebooks należy utworzyć plik `ruff.toml` i dodać następujący kod:

extend-include = ["*.ipynb"]

Możesz także zrobić to samo z plikiem `pyproject.toml`.

Następnie uruchom ponownie polecenia, aby zobaczyć, jak wprowadza zmiany w plikach notesu Jupyter.

2 pliki zostały sformatowane i mamy 2 pliki Notatnika.

$ ruff format .
>>> 2 files reformatted, 3 files left unchanged

Naprawiliśmy także problemy z tymi plikami, ponownie uruchamiając polecenie `check`.

$ ruff check --fix .
>>> Found 51 errors (6 fixed, 45 remaining).

Efekt końcowy jest niesamowity. Dokonał wszystkich niezbędnych zmian bez łamania kodu.

Warto przeczytać!  Multimodalne modele językowe: przyszłość sztucznej inteligencji (AI)

Ulepsz swój styl kodowania w Pythonie dzięki Ruff
Gif autorstwa autora

Skonfigurowanie Ruff dla Jupyter Notebooks jest łatwe poprzez edycję pliku `ruff.toml` w celu dostosowania ustawień lintera i formatera. Więcej szczegółów znajdziesz w dokumentacji konfiguracyjnej Ruffa.

target-version = "py311"
extend-include = ["*.ipynb"]
line-length = 80

[lint]
extend-select = [
  "UP",  # pyupgrade
  "D",   # pydocstyle
]

[lint.pydocstyle]
convention = "google"

Deweloperzy i zespoły mogą używać Ruffa jako haka przed zatwierdzeniem za pomocą `ruff-pre-commit`:

- repo: 
  # Ruff version.
  rev: v0.1.5
  hooks:
    # Run the linter.
    - id: ruff
      args: [ --fix ]
    # Run the formatter.
    - id: ruff-format

Można go również użyć jako akcji GitHub poprzez `ruff-action`:

name: Ruff
on: [ push, pull_request ]
jobs:
  ruff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: chartboost/ruff-action@v1

Najbardziej przyjemnym aspektem Ruffa jest rozszerzenie VSCode. Upraszcza formatowanie i linting, eliminując potrzebę stosowania rozszerzeń innych firm. Po prostu wyszukaj Ruff na rynku rozszerzeń, aby je zainstalować.

Ulepsz swój styl kodowania w Pythonie dzięki Ruff
Obraz z Ruff — Visual Studio Marketplace

Skonfigurowałem plik „setting.json” tak, aby formatował się przy zapisie.

Ruff zapewnia błyskawiczne linting i formatowanie, co zapewnia czystszy i bardziej spójny kod Pythona. Dzięki ponad 700 wbudowanym regułom zaimplementowanym w Rust w celu zwiększenia wydajności, Ruff czerpie inspirację z popularnych narzędzi, takich jak Flake8, isort i pyupgrade, aby egzekwować kompleksowy zestaw najlepszych praktyk kodowania. Wyselekcjonowany zestaw reguł koncentruje się na wychwytywaniu błędów i krytycznych problemów ze stylem bez nadmiernego czepiania się.

Warto przeczytać!  Apple Store spada przed zamówieniami w przedsprzedaży na żółtego iPhone'a 14 i iPhone'a 14 Plus

Bezproblemowa integracja z hakami przed zatwierdzeniem, akcjami GitHub i edytorami takimi jak VSCode ułatwia włączenie Ruffa do nowoczesnych przepływów pracy w języku Python. Niezrównana szybkość i przemyślanie zaprojektowany zestaw reguł sprawiają, że Ruff jest niezbędnym narzędziem dla programistów Pythona, którzy cenią szybką informację zwrotną, czysty kod i płynną współpracę w zespole. Ruff wyznacza nowy standard lintingu i formatowania w Pythonie, łącząc solidną funkcjonalność z niesamowitą wydajnością.

Abid Ali Awan (@1abidaliawan) to certyfikowany specjalista ds. analityki danych, który uwielbia budować modele uczenia maszynowego. Obecnie koncentruje się na tworzeniu treści i pisaniu blogów technicznych na temat technologii uczenia maszynowego i data science. Abid posiada tytuł magistra w zakresie zarządzania technologią oraz tytuł licencjata w dziedzinie inżynierii telekomunikacyjnej. Jego wizją jest zbudowanie produktu AI wykorzystującego grafową sieć neuronową dla uczniów zmagających się z chorobami psychicznymi.


Źródło