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, deren Einhaltung für das saubere Verfassen von Python-Programmen erforderlich ist.

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-Autors 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 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 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 pycodestyle       # Programm wird nur für den aktuellen Nutzer installiert  

Hinweis!

Fremdsoftware kann das System gefährden.

Benutzung

pycodestyle kann über die Kommandozeile genutzt werden. Die allgemeine Syntax lautet[2]:

pycodestyle OPTION DATEI(EN) 

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

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 pycodestyle_test.py ab und lässt mit dem Aufruf von

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:

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:

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:

pycodestyle trunk --exclude=*.tmpl,jsontemplate.py