pycodestyle
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
PEP 8 🇬🇧 ist der "Style Guide for Python Code", also die Richtlinie zum Formatieren von Python-Code, an die sich quasi jeder Python-Programmierer hält.
Das Programm pycodestyle 🇬🇧 kann den eigenen Programmcode auf Konformität mit PEP 8 untersuchen und vorhandene Fehler direkt anzeigen. Das Programm hießt früher "pep8", wurde aber auf Wunsch 🇬🇧 des Python-Erfinder Guido van Rossum umbenannt.
Installation¶
Das Programm kann über die Paketquellen installiert werden [1]:
pycodestyle
Befehl zum Installieren der Pakete:
sudo apt-get install pycodestyle
Oder mit apturl installieren, Link: apt://pycodestyle
Dabei wird das Kommandozeilenprogramm als auch das Python-Modul installiert.
Manuell¶
Wie unter Python üblich, kann man sich die aktuellste Version von pep8 auch mit Hilfe von pip aus dem Python Package Index 🇬🇧 installieren. Dabei wird auch sowohl das Kommandozeilenprogramm als auch das Python-Modul installiert:
Der Python Paketmanager pip stellt häufig aktuellere Versionen von Programmen als in den Paketquellen bereit. Folgendermaßen lässt sich das Programm darüber installieren:
pip3 install pep8 # Programm wird nur für den aktuellen Nutzer installiert
Hinweis!
Fremdsoftware kann das System gefährden.
Benutzung¶
pycodestyle wird über die Kommandozeile genutzt. Die allgemeine Syntax lautet[2]:
pycodestyle OPTION DATEI(EN)
Optionen von pep8 | |
Option | Erklärung |
--show-source | Zeigt den Quellcode, welcher den Fehler enthält, mit an. |
--show-pep8 | Zeigt den den Fehler betreffenden Abschnitt aus der PEP 8 mit an. (Hinweis: dadurch kann die Ausgabe sehr lang werden) |
--exclude=DATEIEN | Ignoriert die Datei(en) DATEIEN bei der Prüfung. Mehrere Dateien können durch ein Komma , getrennt werden, Wildcards und Joker können auch eingesetzt werden (z.B. *.html ). |
--filename=DATEIEN | Es werden nur die Datei(en) DATEIEN geprüft. Diese Option bewirkt das Gegenteil zu --exclude . |
--ignore=FEHLER | Es werden keine Meldungen zum Fehlertyp FEHLER angezeigt. Mehrere Fehlertypen können durch ein Komma , getrennt angegeben werden. |
--select=FEHLER | Es werden nur Fehler vom Fehlertyp FEHLER angezeigt. Diese Option ist genau Gegenteil von --ignore . |
Der Aufruf von
pycodestyle -h
zeigt aber die vollständige Hilfe an.
Beispiel¶
Das folgende, kurze (und nicht weiter sinnvolle) Code-Beispiel ist an einigen Stellen nicht PEP-8-konform:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import os, datetime class MyClass(object): def __init__(self): self.my_dict = {'mykey':'ein Wert'} def My_method(self): if self.my_dict.has_key('mykey'): print '''Das Dictionary my_Dict enthält einen Schlüssel mit dem Namen {0}, {1}'''.format( self.my_dict['mykey'],'toll, oder?') print datetime.datetime.today() if __name__=='__main__': my_class = MyClass() my_class.My_method() |
Speichert man die Datei z.B. unter dem Namen pep8_test.py ab und lässt mit dem Aufruf von
pycodestyle pep8_test.py
den Konformitätstest darüber laufen, erhält man folgende Ausgabe, die die Fehler auslistet:
pep8_test.py:3:10: E401 multiple imports on one line pep8_test.py:5:1: E302 expected 2 blank lines, found 1 pep8_test.py:7:36: E231 missing whitespace after ':' pep8_test.py:8:5: E301 expected 1 blank line, found 0 pep8_test.py:9:24: W601 .has_key() is deprecated, use 'in' pep8_test.py:10:80: E501 line too long (101 > 79 characters) pep8_test.py:11:38: E231 missing whitespace after ',' pep8_test.py:14:12: E225 missing whitespace around operator pep8_test.py:18:1: W293 blank line contains whitespace pep8_test.py:18:1: W391 blank line at end of file
Den Fehler Typ "W293" in der Zeile 8 sieht man übrigens im obigen Listing nicht - hier werden überflüssigen Leerzeichen in einer sonst leeren Zeile bemängelt.
Der Aufruf von:
pycodestyle pep8_test.py --statistics
zeigt, zusätzlich zur obigen Ausgabe, noch eine Fehlerstatistik an:
... 1 E225 missing whitespace around operator 2 E231 missing whitespace after ':' 1 E301 expected 1 blank line, found 0 1 E302 expected 2 blank lines, found 1 1 E305 expected 2 blank lines after class or function definition, found 1 1 E401 multiple imports on one line 1 E501 line too long (101 > 79 characters) 1 W293 blank line contains whitespace 1 W391 blank line at end of file 1 W601 .has_key() is deprecated, use 'in'
Hier tritt also jeder Fehler nur ein- oder zweimal auf.
Der folgende Befehl weist pep8 an, die Fehler E501 (= Zeile länger als 79 Zeichen) und W292 (Leerzeile enthält Leerzeichen) zu ignorieren. Entsprechend kürzer ist die Liste der Fehler:
pycodestyle pep8_test.py --ignore=E501,W292
pep8_test.py:3:10: E401 multiple imports on one line pep8_test.py:5:1: E302 expected 2 blank lines, found 1 pep8_test.py:7:36: E231 missing whitespace after ':' pep8_test.py:8:5: E301 expected 1 blank line, found 0 pep8_test.py:9:24: W601 .has_key() is deprecated, use 'in' pep8_test.py:11:38: E231 missing whitespace after ',' pep8_test.py:14:1: E305 expected 2 blank lines after class or function definition, found 1 pep8_test.py:14:12: E225 missing whitespace around operator pep8_test.py:18:1: W293 blank line contains whitespace pep8_test.py:18:1: W391 blank line at end of file
Der folgende Befehl veranlasst pep8 dazu, alle Dateien im Verzeichnis trunk (und dessen Unterverzeichnissen) zu prüfen, dabei aber alle Dateien mit der Endung tmpl sowie die Datei jsontemplate.py zu ignorieren:
pycodestyle trunk --exclude=*.tmpl,jsontemplate.py
Links¶
Dokumentation 🇬🇧 von pycodestyle
Github Seite von pycodestyle
autopep8 🇬🇧 - Python-Programm zur automatisierten Korrektur von nicht PEP8-konformen Python-Code