Wiem, że istnieją narzędzia, które sprawdzają, czy Twój kod w Pythonie jest zgodny z PEP8, na przykład istnieje zarówno usługa online, jak i moduł Pythona .
Jednak nie mogę znaleźć usługi lub modułu, który może przekonwertować mój plik Pythona na samodzielny, prawidłowy plik Pythona PEP8. Czy ktoś wie, czy są jakieś?
Zakładam, że jest to wykonalne, ponieważ w PEP8 chodzi o wygląd kodu, prawda?
python
coding-style
pep8
Chen Xie
źródło
źródło
Odpowiedzi:
Niestety "burza pep8" (cały projekt) ma kilka negatywnych skutków ubocznych:
Jako alternatywę (i dzięki @yp za pomysł ) napisałem mały pakiet, który autopep8 obsługuje tylko te linie, nad którymi pracowałeś od ostatniego zatwierdzenia / gałęzi:
Zasadniczo pozostawiając projekt trochę lepiej niż go znalazłeś :
Załóżmy, że skończyłeś pracę
master
i jesteś gotowy do wykonania:Lub, aby wyczyścić nowe wiersze, które zatwierdziłeś od ostatniego zatwierdzenia:
Zasadniczo
pep8radius
stosuje autopep8 do wierszy w wyjściu git / hg diff (z ostatniego wspólnego zatwierdzenia ).Ten skrypt obecnie działa z git i hg, jeśli używasz czegoś innego i chcesz, aby to zadziałało, napisz komentarz / problem / PR !
źródło
Możesz użyć autopep8 ! Podczas gdy ty robisz sobie filiżankę kawy, to narzędzie szczęśliwie usuwa wszystkie brzydkie naruszenia PEP8, które nie zmieniają znaczenia kodu.
Zainstaluj go przez pip:
Zastosuj to do określonego pliku:
lub do twojego projektu (rekurencyjnie), opcja szczegółowa daje ci informację zwrotną, jak to idzie :
Uwaga: czasami domyślne 100 przebiegów nie wystarcza, ustawiam go na 2000, ponieważ jest dość wysoki i złapie wszystkie oprócz najbardziej kłopotliwych plików (przestaje przekazywać, gdy nie znajdzie rozwiązalnych wykroczeń pep8) ...
W tym momencie sugeruję ponowne przetestowanie i wykonanie zatwierdzenia!
Jeśli chcesz "pełnej" zgodności z PEP8: jedną z taktyk, których użyłem, jest uruchomienie autopep8 jak powyżej, a następnie uruchomienie PEP8, który wypisuje pozostałe naruszenia (plik, numer linii i co):
i ręcznie zmieniaj je indywidualnie (np. E712s - porównanie z wartością logiczną).
Uwaga: autopep8 oferuje
--aggressive
argument (w celu bezwzględnego "naprawienia" tych naruszeń zmieniających znaczenie), ale uważaj, jeśli używasz agresywnego, być może będziesz musiał debugować ... (np. W numpy / pandas,True == np.bool_(True)
ale nieTrue is np.bool_(True)
!)Możesz sprawdzić, ile naruszeń każdego rodzaju (przed i po):
Uwaga: uważam, że E501s (zbyt długa linia) to szczególny przypadek, ponieważ prawdopodobnie będzie ich dużo w twoim kodzie, a czasami nie są one korygowane przez autopep8.
Jako przykład zastosowałem tę technikę do kodu bazowego pand .
źródło
pep8
Nazwa pakietu wymienionego w tej odpowiedzi została zmieniona napycodestyle
: github.com/PyCQA/pycodestyle/releases/tag/1.7.1@Andy Hayden dał dobry przegląd autopep8. Oprócz tego istnieje jeszcze jeden pakiet o nazwie pep8ify, który również robi to samo.
Jednak oba pakiety mogą usuwać tylko błędy lint, ale nie mogą formatować kodu.
Powyższy kod pozostaje taki sam również po pep8ify. Ale kod jeszcze nie wygląda dobrze. Możesz użyć elementów formatujących, takich jak yapf , które sformatują kod, nawet jeśli jest zgodny z PEP8. Powyższy kod zostanie sformatowany na
Czasami nawet niszczy to ręczne formatowanie. Na przykład
zostanie przekonwertowany na
Ale możesz powiedzieć mu, aby zignorował niektóre części.
Zaczerpnięte z mojego starego posta na blogu: Automatycznie PEP8 i formatuj swój kod Pythona!
źródło
little = more[3: 5]
jest błąd w pep8 (biblioteka)? yapf to zdecydowanie przyszłość, algorytm za nim (zasadniczo najkrótsza ścieżka na wykresie wszystkich opcji formatowania) jest bardzo eleganckim rozwiązaniem i prawdopodobnie będzie miał mniej błędów, a także formatowanie kanoniczne.Jeśli używasz eclipse + PyDev, możesz po prostu aktywować autopep8 w ustawieniach PyDev: Windows -> Preferencje -> wpisz „autopep8” w filtrze wyszukiwania.
Sprawdź „Użyj autopep8.py do formatowania kodu?” -> OK
Teraz formatowanie kodu CTRL-SHIFT-F eclipse powinno sformatować twój kod za pomocą autopep8 :)
źródło
Przeprowadziłem szerokie badania na temat różnych instrumentów dla języka Python i stylu kodu. Istnieją dwa rodzaje instrumentów: linters - analizujący twój kod i ostrzegający o źle użytych stylach kodu i pokazujący porady, jak to naprawić, oraz elementy formatujące kod - po zapisaniu pliku ponownie formatuje dokument przy użyciu stylu PEP.
Ponieważ ponowne formatowanie musi być dokładniejsze - jeśli przerabia coś, czego nie chcesz, stało się bezużyteczne - obejmuje mniejszą część PEP, linters pokazuje znacznie więcej.
Wszystkie mają różne uprawnienia do konfiguracji - na przykład pylinter konfigurowalny we wszystkich jego regułach (można włączyć / wyłączyć każdy typ ostrzeżeń), czarny w ogóle nieskonfigurowalny.
Oto kilka przydatnych linków i samouczków:
Dokumentacja:
Linters (według popularności):
Elementy formatujące kod (według popularności):
źródło
Jest wiele.
IDE zwykle mają wbudowane pewne możliwości formatowania. IntelliJ Idea / PyCharm ma, to samo dotyczy wtyczki Pythona dla Eclipse i tak dalej.
Istnieją elementy formatujące / lintery, które mogą kierować reklamy na wiele języków. https://coala.io jest tego dobrym przykładem.
Następnie są narzędzia przeznaczone do jednego celu, z których wiele jest wymienionych w innych odpowiedziach.
Jedną z metod automatycznego ponownego formatowania jest przeanalizowanie pliku do drzewa AST (bez usuwania komentarzy), a następnie zrzucenie go z powrotem do tekstu (co oznacza, że nic z oryginalnego formatowania nie jest zachowywane). Przykładem może być https://github.com/python/black .
źródło