ubuntuusers.de

pep8

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

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

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 gleichnamige Programm pep8 🇬🇧 kann den eigenen Programmcode auf Konformität mit PEP 8 untersuchen und vorhandene Fehler direkt anzeigen.

Installation

Hinweis:

Da PEP 8 gleichermaßen für alle Python-Version gilt, ist normalerweise die parallele Installation beider Pakete nicht notwendig. Da das Paket pep8 direkt eine Kommandozeilen-Version des Programms installiert, ist dieses Paket zu bevorzugen.

Das Programm kann über die Paketquellen installiert werden [1]:

  • pep8

Paketliste zum Kopieren:

sudo apt-get install pep8 

Oder mit apturl installieren, Link: apt://pep8

Seit Ubuntu 14.04 lautet der Name für das entsprechende Python-3-Modul:

  • python3-pep8

Paketliste zum Kopieren:

sudo apt-get install python3-pep8 

Oder mit apturl installieren, Link: apt://python3-pep8

Dabei wird aber nur das Python-Modul installiert, nicht das Kommandozeilenprogramm.

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 sowohl das Kommandozeilenprogramm als auch das Python-Modul installiert.

Benutzung

pep8 wird über die Kommandozeile genutzt, sofern man das Programm über das Paket pep8 installiert hat. Die allgemeine Syntax lautet[2]:

pep 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 kann 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.
-h Zeigt die Hilfe zu pep8 an.

Wenn pep8 über pip installiert wird, wird keine Man-Page angelegt. Der Aufruf von

pep8 -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
17
18
# -*- coding: utf-8 -*-

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

pep8 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:32: E231 missing whitespace after ':'
pep8_test.py:8:1: W293 blank line contains whitespace
pep8_test.py:10:24: W601 .has_key() is deprecated, use 'in'
pep8_test.py:11:80: E501 line too long (99 > 79 characters)
pep8_test.py:12:16: E121 continuation line indentation is not a multiple of four
pep8_test.py:12:37: E231 missing whitespace after ','
pep8_test.py:16:12: E225 missing whitespace around operator

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:

pep8 pep8_test.py --statistics 

zeigt, zusätzlich zur obigen Ausgabe, noch eine Fehlerstatistik an:

...
1       E121 continuation line indentation is not a multiple of four
1       E225 missing whitespace around operator
2       E231 missing whitespace after ':'
1       E302 expected 2 blank lines, found 1
1       E401 multiple imports on one line
1       E501 line too long (99 > 79 characters)
1       W293 blank line contains whitespace
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:

pep8 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:32: E231 missing whitespace after ':'
pep8_test.py:8:1: W293 blank line contains whitespace
pep8_test.py:10:24: W601 .has_key() is deprecated, use 'in'
pep8_test.py:12:16: E121 continuation line indentation is not a multiple of four
pep8_test.py:12:37: E231 missing whitespace after ','
pep8_test.py:16:12: E225 missing whitespace around operator

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:

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

python3-pep8

Wer das Paket python3-pep8 installiert hat, der kann pep8 nicht direkt aufrufen. Der Aufruf erfolgt wie folgt:

python3 -m pep8 OPTIONEN DATEI 

Ansonsten ist die Benutzung identisch mit der oben beschriebenen.

Diese Revision wurde am 2. Mai 2019 23:54 von BillMaier erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, Python