pycodestyle

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Benutzung
  3. Links

Wiki/Icons/python.png 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]:

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:

Wer die neueste Version installieren möchte, kann das Programm über den Python Paketmanager pip 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