[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/python.png, 48, align=left)]] [http://www.python.org/dev/peps/pep-0008/ PEP 8] {en} ist der "Style Guide for Python Code", also die Richtlinie zum Formatieren von [:Python:]-Code, deren Einhaltung für das saubere Verfassen von Python-Programmen erforderlich ist. Das Programm [http://pypi.python.org/pypi/pycodestyle pycodestyle] {en} 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 [github:PyCQA/pycodestyle/issues/466:auf Wunsch] {en} des Python-Autors Guido van Rossum umbenannt. = Installation = Das Programm kann über die Paketquellen installiert werden [1]: {{{#!vorlage Paketinstallation pycodestyle }}} Dabei wird sowohl das Kommandozeilenprogramm als auch das Python-Modul installiert. == Manuell == Wie unter Python üblich, kann man sich die aktuellste Version von `pycodestyle` auch mit Hilfe von [:pip:] aus dem [https://pypi.org Python Package Index] {en} installieren. Dabei wird auch sowohl das Kommandozeilenprogramm als auch das Python-Modul installiert. [[Vorlage(pipinstallation, pycodestyle)]] = Benutzung = `pycodestyle` kann über die Kommandozeile genutzt werden. Die allgemeine Syntax lautet[2]: {{{#!vorlage Befehl pycodestyle OPTION DATEI(EN) }}} {{{#!vorlage Tabelle <-2 rowclass="titel"> Optionen von `pycodestyle` +++ 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 {{{#!vorlage Befehl 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: {{{#!code python 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 '''pycodestyle_test.py''' ab und lässt mit dem Aufruf von {{{#!vorlage Befehl pycodestyle pycodestyle_test.py }}} den Konformitätstest darüber laufen, erhält man folgende Ausgabe, die die Fehler auslistet: {{{ pycodestyle_test.py:3:10: E401 multiple imports on one line pycodestyle_test.py:5:1: E302 expected 2 blank lines, found 1 pycodestyle_test.py:7:36: E231 missing whitespace after ':' pycodestyle_test.py:8:5: E301 expected 1 blank line, found 0 pycodestyle_test.py:9:24: W601 .has_key() is deprecated, use 'in' pycodestyle_test.py:10:80: E501 line too long (101 > 79 characters) pycodestyle_test.py:11:38: E231 missing whitespace after ',' pycodestyle_test.py:14:12: E225 missing whitespace around operator pycodestyle_test.py:18:1: W293 blank line contains whitespace pycodestyle_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: {{{#!vorlage Befehl pycodestyle pycodestyle_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 `pycodestyle` 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: {{{#!vorlage Befehl pycodestyle pycodestyle_test.py --ignore=E501,W292 }}} {{{ pycodestyle_test.py:3:10: E401 multiple imports on one line pycodestyle_test.py:5:1: E302 expected 2 blank lines, found 1 pycodestyle_test.py:7:36: E231 missing whitespace after ':' pycodestyle_test.py:8:5: E301 expected 1 blank line, found 0 pycodestyle_test.py:9:24: W601 .has_key() is deprecated, use 'in' pycodestyle_test.py:11:38: E231 missing whitespace after ',' pycodestyle_test.py:14:1: E305 expected 2 blank lines after class or function definition, found 1 pycodestyle_test.py:14:12: E225 missing whitespace around operator pycodestyle_test.py:18:1: W293 blank line contains whitespace pycodestyle_test.py:18:1: W391 blank line at end of file }}} Der folgende Befehl veranlasst `pycodestyle` 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: {{{#!vorlage Befehl pycodestyle trunk --exclude=*.tmpl,jsontemplate.py }}} = Links = * [https://pycodestyle.pycqa.org/en/latest/ Dokumentation] {en} von pycodestyle * [github:PyCQA/pycodestyle:Github-Seite] von pycodestyle * [github:hhatto/autopep8:autopep8] {en} - Python-Programm zur automatisierten Korrektur von nicht PEP8-konformen Python-Code #tag: Programmierung, Python