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 ein Modul finden, das meine Python-Datei in eine eigenständige, PEP8-gültige Python-Datei convert umwandeln kann. Weiß jemand, ob es welche gibt?
Ich gehe davon aus, dass es machbar ist, da es sich bei PEP8 um das Aussehen des Codes handelt, richtig?
Leider hat "pep8 storming" (das gesamte Projekt) mehrere negative Nebenwirkungen:
Als Alternative (und dank @ y-p für die Idee ) habe ich ein kleines Paket geschrieben, das automatisch nur die Zeilen enthält, an denen Sie seit dem letzten Commit/Branch gearbeitet haben:
pip install pep8radius
Angenommen, Sie haben Ihre Arbeit mit master
erledigt und sind bereit zu begehen:
# be somewhere in your project directory
# see the diff with pep, see the changes you've made since master
pep8radius master --diff
# make those changes
pep8radius master --diff --in-place
Oder um die neuen Zeilen zu bereinigen, die Sie seit dem letzten Commit festgelegt haben:
pep8radius --diff
pep8radius --diff --in-place
# the lines which changed since a specific commit `git diff 98f51f`
pep8radius 98f51f --diff
Grundsätzlich pep8radius
wendet autopep8 auf Zeilen in der Ausgabe von git/hg diff (von dem letzten Shared Commit an.
Dieses Skript funktioniert derzeit mit git und hg, wenn Sie etwas anderes verwenden und möchten, dass dies funktioniert bitte posten Sie einen Kommentar/issue/PR !
Sie können autopep8 verwenden! Während Sie sich eine Tasse Kaffee zubereiten, entfernt dieses Tool alle lästigen PEP8-Verstöße, die die Bedeutung des Codes nicht ändern.
Installiere es via pip:
pip install autopep8
Wenden Sie dies auf eine bestimmte Datei an:
autopep8 py_file --in-place
oder zu Ihrem Projekt (rekursiv), die ausführliche Option gibt Ihnen ein Feedback darüber, wie es läuft :
autopep8 project_dir --recursive --in-place --pep8-passes 2000 --verbose
Hinweis: Manchmal reicht die Standardeinstellung von 100 Durchläufen nicht aus. Ich setze sie auf 2000, da sie ziemlich hoch ist und alle bis auf die problematischsten Dateien abfängt (wenn kein auflösbares pep8 gefunden wird, hört sie auf zu passieren Verstöße) ...
Wenn Sie die "vollständige" PEP8-Konformität wünschen: Eine von mir angewandte Taktik besteht darin, autopep8 wie oben auszuführen. Führen Sie dann PEP8 aus, das die verbleibenden Verstöße ausgibt. ( Datei, Zeilennummer und was):
pep8 project_dir --ignore=E501
und manuell ändern Sie diese einzeln (z. B. E712s - Vergleich mit Boolean).
Hinweis: autopep8 bietet ein --aggressive
-Argument (um diese Verstöße gegen die Bedeutungsänderung rücksichtslos "zu beheben"). Wenn Sie jedoch aggressive Methoden verwenden, müssen Sie möglicherweise Fehler beheben ... (z. B. in numpy/pandas True == np.bool_(True)
aber nicht True is np.bool_(True)
!)
pep8 --quiet --statistics .
Hinweis: Ich halte E501s (Zeile zu lang) für einen Sonderfall, da wahrscheinlich viele davon in Ihrem Code enthalten sind und diese manchmal nicht von autopep8 korrigiert werden.
Als Beispiel habe ich angewendet Technik auf die Pandas Codebasis.
@Andy Hayden gab einen guten Überblick über autopep8. Zusätzlich dazu gibt es noch ein weiteres Paket namens pep8ify , das dasselbe tut.
Beide Pakete können jedoch nur Flusenfehler entfernen, jedoch keinen Code formatieren.
little = more[3: 5]
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 formatieren, wenn der Code PEP8-kompatibel ist. Der obige Code wird in formatiert
little = more[3:5]
Manchmal zerstört dies sogar Ihre manuelle Formatierung. Zum Beispiel
BAZ = {
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
}
wird in konvertiert
BAZ = {[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]}
Aber Sie können es sagen, um einige Teile zu ignorieren.
BAZ = {
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
} # yapf: disable
Aus meinem alten Blogpost entnommen: Automatisch PEP8 & Formatieren Sie Ihren Python-Code!
Wenn Sie Eclipse + PyDev verwenden, können Sie Autopep8 einfach über die PyDev-Einstellungen aktivieren: Windows -> Voreinstellungen -> Geben Sie 'autopep8' in den Suchfilter ein.
Überprüfen Sie das Kontrollkästchen "autopep8.py für die Code-Formatierung verwenden". -> OK
Jetzt sollte der CTRL-SHIFT-F-Code von Eclipse mit autopep8 formatiert werden :)
Da gibt es viele.
IDEs verfügen normalerweise über eine eingebaute Formatierungsfunktion. IntelliJ Idea/PyCharm, das gleiche gilt für das Python-Plugin für Eclipse usw.
Es gibt Formatierer/Linters, die auf mehrere Sprachen abzielen können. https://coala.io ist ein gutes Beispiel dafür.
Dann gibt es die Einzweckinstrumente, von denen viele in anderen Antworten erwähnt werden.