Ich weiß, dass es Tools gibt, die überprüfen, ob Ihr Python-Code mit PEP8 kompatibel ist. Beispielsweise gibt es sowohl einen Onlinedienst als auch ein Python-Modul .
Ich kann jedoch keinen Dienst oder kein Modul finden , der meine Python-Datei in eine in sich geschlossene, PEP8-gültige Python-Datei konvertieren kann. Weiß jemand, ob es welche gibt?
Ich nehme an, es ist machbar, da es bei PEP8 nur um das Erscheinungsbild des Codes geht, oder?
python
coding-style
pep8
Chen Xie
quelle
quelle
Antworten:
Leider hat "pep8 Storming" (das gesamte Projekt) mehrere negative Nebenwirkungen:
Als Alternative (und danke an @yp für die Idee ) habe ich ein kleines Paket geschrieben, das nur die Zeilen automatisch bearbeitet, an denen Sie seit dem letzten Commit / Branch gearbeitet haben:
Grundsätzlich verlassen Sie das Projekt ein wenig besser als Sie es vorgefunden haben :
Angenommen, Sie haben Ihre Arbeit erledigt
master
und sind bereit, sich zu verpflichten:Oder um die neuen Zeilen zu bereinigen, die Sie seit dem letzten Festschreiben festgeschrieben haben:
Grundsätzlich
pep8radius
wird autopep8 auf Zeilen in der Ausgabe von git / hg diff angewendet (vom letzten gemeinsamen Commit ).Dieses Skript funktioniert derzeit mit git und hg. Wenn Sie etwas anderes verwenden und möchten, dass dies funktioniert, schreiben Sie bitte einen Kommentar / ein Problem / eine PR !
quelle
Sie können autopep8 verwenden ! Während Sie sich eine Tasse Kaffee machen, entfernt dieses Tool glücklich alle lästigen PEP8-Verstöße, die die Bedeutung des Codes nicht ändern .
Installieren Sie es über pip:
Wenden Sie dies auf eine bestimmte Datei an:
oder zu Ihrem Projekt (rekursiv) gibt Ihnen die ausführliche Option ein Feedback darüber, wie es läuft :
Hinweis: Manchmal reicht die Standardeinstellung von 100 Durchgängen nicht aus. Ich habe sie auf 2000 gesetzt, da sie relativ hoch ist und alle bis auf die problematischsten Dateien abfängt (sie werden nicht mehr übergeben, sobald keine auflösbaren pep8-Verstöße festgestellt werden).
An dieser Stelle schlage ich vor, erneut zu testen und ein Commit durchzuführen!
Wenn Sie eine "vollständige" PEP8-Konformität wünschen: Eine Taktik, die ich verwendet habe, besteht darin, Autopep8 wie oben auszuführen und dann PEP8 auszuführen, das die verbleibenden Verstöße (Datei, Zeilennummer und was) druckt:
und ändern Sie diese manuell einzeln (zB E712s - Vergleich mit Booleschen Werten).
Hinweis: autopep8 bietet ein
--aggressive
Argument (um diese bedeutungsverändernden Verstöße rücksichtslos zu "beheben"), aber Vorsicht, wenn Sie aggressiv sind, müssen Sie möglicherweise debuggen ... (z. B. in numpy / pandas,True == np.bool_(True)
aber nichtTrue is np.bool_(True)
!)Sie können überprüfen, wie viele Verstöße jedes Typs (vorher und nachher):
Hinweis: Ich halte E501s (Zeile zu lang) für einen Sonderfall, da wahrscheinlich viele davon in Ihrem Code enthalten sind und diese manchmal nicht durch Autopep8 korrigiert werden.
Als Beispiel habe ich diese Technik auf die Pandas- Codebasis angewendet .
quelle
pep8
in dieser Antwort erwähnte Paket inpycodestyle
: github.com/PyCQA/pycodestyle/releases/tag/1.7.1 umbenannt@Andy Hayden gab einen guten Überblick über autopep8. Darüber hinaus gibt es ein weiteres Paket namens pep8ify , das dasselbe tut.
Beide Pakete können jedoch nur Flusenfehler entfernen, aber keinen Code formatieren.
Der obige Code bleibt auch nach pep8ifying gleich. Aber der Code sieht noch nicht gut aus. Sie können Formatierer wie yapf verwenden , die den Code auch dann formatieren , wenn der Code PEP8-kompatibel ist. Der obige Code wird mit formatiert
Manchmal zerstört dies sogar Ihre manuelle Formatierung. Beispielsweise
wird konvertiert zu
Sie können jedoch festlegen, dass einige Teile ignoriert werden sollen.
Entnommen aus meinem alten Blog-Beitrag: Automatisch PEP8 & Formatieren Sie Ihren Python-Code!
quelle
little = more[3: 5]
ein Fehler in pep8 (der Bibliothek)? yapf ist hier definitiv die Zukunft. Der dahinter stehende Algorithmus (im Wesentlichen ein kürzester Pfad im Diagramm aller Formatierungsoptionen) ist eine sehr elegante Lösung und wird wahrscheinlich weniger Fehler sowie eine kanonische Formatierung aufweisen.Wenn Sie eclipse + PyDev verwenden, können Sie autopep8 einfach über die PyDev-Einstellungen aktivieren: Windows -> Einstellungen -> geben Sie 'autopep8' in den Suchfilter ein.
Überprüfen Sie die Option "Verwenden Sie autopep8.py für die Code-Formatierung?". -> OK
Jetzt sollte die CTRL-SHIFT-F-Code-Formatierung von eclipse Ihren Code mit autopep8 formatieren :)
quelle
Ich habe mich intensiv mit verschiedenen Instrumenten für Python und Code befasst. Es gibt zwei Arten von Instrumenten: Linters - Analysieren Ihres Codes und Warnen vor schlecht verwendeten Codestilen und Anzeigen von Ratschlägen zur Behebung des Problems sowie Code-Formatierer - Wenn Sie Ihre Datei speichern, wird Ihr Dokument im PEP-Stil neu formatiert.
Da die Neuformatierung genauer sein muss - wenn sie etwas remorfiert, von dem Sie nicht möchten, dass sie unbrauchbar wird -, decken sie weniger Teile von PEP ab, zeigen Linters viel mehr.
Alle haben unterschiedliche Berechtigungen für die Konfiguration - zum Beispiel Pylinter, der in all seinen Regeln konfigurierbar ist (Sie können jede Art von Warnungen ein- und ausschalten), schwarz überhaupt nicht konfigurierbar.
Hier sind einige nützliche Links und Tutorials:
Dokumentation:
Linters (in der Reihenfolge ihrer Beliebtheit):
Code-Formatierer (in der Reihenfolge ihrer Beliebtheit):
quelle
Es gibt viele.
In IDEs sind normalerweise einige Formatierungsfunktionen integriert. IntelliJ Idea / PyCharm funktioniert, dies gilt auch für das Python-Plugin für Eclipse und so weiter.
Es gibt Formatierer / Linters, die auf mehrere Sprachen abzielen können. https://coala.io ist ein gutes Beispiel dafür.
Dann gibt es die Einzweckwerkzeuge, von denen viele in anderen Antworten erwähnt werden.
Eine spezielle Methode zur automatischen Neuformatierung besteht darin, die Datei in einen AST-Baum zu analysieren (ohne Kommentare zu löschen) und sie dann wieder in Text zu kopieren (was bedeutet, dass nichts von der ursprünglichen Formatierung erhalten bleibt). Ein Beispiel hierfür wäre https://github.com/python/black .
quelle