Python-Stil: 5 Tools zum Bereinigen Ihres Python-Codes

Theoretisch ist jeder Python-Code in Ordnung, solange er syntaktisch korrekt ist und wie beabsichtigt ausgeführt wird. In der Praxis möchten Sie in Ihren Projekten einen einheitlichen Stil verwenden, der vorzugsweise von Pythons eigenen Stilempfehlungen geleitet wird. Die gute Nachricht ist, dass Sie dies nicht von Hand tun müssen. Das Python-Ökosystem enthält eine Vielzahl von Werkzeugen, von stark fokussierten bis hin zu weitreichenden, um sicherzustellen, dass der Python-Quellcode den Stilkonventionen entspricht.

In diesem Artikel werden vier beliebte Tools zum Überprüfen von Python-Codestilen sowie eines zum konsistenten Formatieren von Code untersucht. Python-IDEs wie PyCharm oder Visual Studio Code unterstützen sie entweder nativ oder mit einer Erweiterung, sodass sie problemlos in Ihren Entwicklungsworkflow integriert werden können.

Pycodestyle

PEP 8 ist das Dokument, in dem die Codierungskonventionen von Python dargelegt werden - von der Verwendung von Tabulatoren oder Leerzeichen beim Einrücken (vier Leerzeichen verwenden, Problem gelöst) bis zur Benennung von Variablen und Objekten. Pycodestyle ist das Python-Modul, das Python-Code mit den PEP 8-Empfehlungen vergleicht und einen Bericht darüber liefert, wo der analysierte Code außerhalb der Spezifikation liegt.

Pycodestyle bietet keine automatischen Korrekturen für Probleme. das liegt an dir. Pycodestyle ist jedoch in hohem Maße konfigurierbar, sodass Sie bestimmte Arten von Fehlern unterdrücken oder nur bestimmte Dateien in einem Quellbaum analysieren können. Und fast jede IDE mit Python-Unterstützung unterstützt auch Pycodestyle. Dies ist die einfache Wahl für universelle Kompatibilität, wenn nicht sogar für Funktionalität.

Viele Python-Code-Linters können in Python als Module verwendet werden, und Pycodestyle ist keine Ausnahme. Sie können damit Code programmgesteuert überprüfen, beispielsweise als Teil einer Testsuite.

Geeignet für:  Grundlegende Überprüfung der PEP 8-Konformität.

Autopep8

Autopep8 setzt dort an, wo Pycodestyle aufhört. Es verwendet Pycodestyle, um zu bestimmen, welche Änderungen vorgenommen werden müssen, und formatiert dann den Code neu, um den bereitgestellten Vorschlägen zu entsprechen. Bestehende Dateien können an Ort und Stelle neu formatiert oder in neue Dateien geschrieben werden. Autopep8 behebt auch eine Reihe anderer Probleme, die sich einschleichen können, z. B. das Bereinigen von Code, der von Python 2 nach Python 3 konvertiert wurde, oder Dateien mit gemischten Markierungen am Zeilenende. Und Autoprep8 kann programmgesteuert verwendet werden, um den als Zeichenfolgen bereitgestellten Code neu zu formatieren.

Geeignet für: Konvertieren von Dateien in PEP-8-Konformität.

Flake8

Flake8 fasst mehrere Python-Linting- und Code-Tools in einem einzigen Paket zusammen. Neben PyFlakes, bei dem grundlegende Fehler mithilfe der Syntaxprüfung erkannt werden, und Pycodestyle, das oben erläutert wurde, bietet Flake8 ein zusätzliches Tool zur Überprüfung der „zyklomatischen Komplexität“ eines Projekts, dh der Anzahl der im Programm gefundenen unabhängigen Codepfade . (Die zyklomatische Komplexität ist eine potenziell nützliche Metrik, wenn Sie beispielsweise verhindern möchten, dass ein Basismodul zu einfach wird.) Am Ende jeder Analyse liefert Flake8 eine Perzentilmetrik für die Gesamtqualität des analysierten Codes So erhalten Sie eine schnelle Vorstellung davon, welche Teile einer Codebasis am problematischsten sind.

Flake8 verfügt auch über ein Plug-In-System, sodass Flusen mit Git-Commits oder anderen automatisierten Aktionen gekoppelt werden können, um beispielsweise problematischen Code einem Reformatter zuzuführen.

Geeignet für:  Bewertung der gesamten Codequalität mit spezifischen Empfehlungen.

Pylint

Pylint ist wahrscheinlich der am weitesten verbreitete und unterstützte Python-Linter. Wie die anderen sucht es in Ihrem Python-Code nach Fehlern und Abweichungen von den Codierungsstandards und bietet Änderungen zur Behebung dieser Fehler.

Pylint ist auch wohl der completist des Codeprüfers, in dem Sinne , dass es Sie sehr viele Probleme mit Ihrem Code warnen kann, in Ihrem speziellen Kontext von denen einige nicht einmal relevant sein könnte. Die Ergebnisse können ausführlich sein, aber auch auf die Besonderheiten eines bestimmten Projekts zugeschnitten werden.

Pylint sucht nach fünf zunehmend problematischeren Problemklassen. "Konventionen" sind Verstöße gegen PEP 8 oder andere Konsistenzregeln in Python. "Refactors" weisen auf Codegerüche, häufige Fehler oder Code hin, der effizienter oder weniger verwirrend überarbeitet werden könnte, z. B. zyklische Importe oder Dateien mit zu vielen ähnlichen Zeilen, die zu einer gemeinsamen Funktion zusammengefasst werden könnten. "Warnungen" sind Python-spezifische Probleme, wie nicht erreichbarer Code (alles nach einem  return in einer Funktion) oder Klassen, denen eine __init__ Methode fehlt  . "Fehler" sind tatsächliche Codefehler wie undefinierte Variablen, und "schwerwiegende" Probleme verhindern, dass Pylint überhaupt ausgeführt wird.

Was Pylint sowohl am nützlichsten als auch am schwersten macht, ist die Menge an Feedback, die es gibt. Die gute Nachricht ist, dass für diejenigen, die es optimieren möchten, die Ausführlichkeit und Granularität von Pylint pro Projekt oder sogar pro Datei geändert werden kann. Außerdem können Sie auf eine Reihe von Pylint-Plug-Ins zurückgreifen, die bestimmte Arten von Überprüfungen hinzufügen, z. B. für Code, der zu komplex ist (lange Ketten von  ifs usw.), oder Flusen für veraltete integrierte Funktionen.

Am besten geeignet für:  Qualitätskontrolle von Suppe zu Nuss für Code, vorausgesetzt, es macht Ihnen nichts aus, die Einstellungen zu ändern, um eine Überlastung zu vermeiden.

Schwarz

Schwarz ist kein Linter- oder Code-Analyse-Tool, sondern ein Tool zur Durchsetzung des Stils, um eine bessere Codequalität sicherzustellen. Aus diesem Grund sitzt es bequem neben den anderen hier beschriebenen Tools, da so viele grundlegende Stilfehler vorbeugend vermieden werden können.

Schwarz wird als „kompromissloser Code-Formatierer“ bezeichnet - kompromisslos, da es außer der Zeilenlänge keine einstellbaren Optionen gibt. Schwarz formatiert Python-Code in einen singulären, konsistenten und lesbaren Stil um und stützt sich dabei auf interne Regeln für die Behandlung kniffliger Probleme wie mehrzeiliger Ausdrücke, sodass auch diese konsistent neu formatiert werden.

Ein angepriesener Vorteil bei der Verwendung von Schwarz ist, dass es alle Streitigkeiten über die Formatierung löst, so dass „Bikeshedding“ vermieden wird und die Linter-Ausgabe auch weniger verrauscht wird. Sie müssen sich nicht darüber streiten, wie Code für ein Projekt formatiert oder viel davon manuell ausgeführt werden soll. Sie verwenden nur Schwarz und sind damit fertig. Sie können sogar viele IDEs so konfigurieren, dass Code automatisch mit Schwarz formatiert wird. Ein weiterer behaupteter Vorteil besteht darin, dass  git Commits sauberer werden, da weniger Änderungen an einer bestimmten Datei vorgenommen werden.

Geeignet für: Codebasen massenhaft in grundlegende Stilkonformität verwandeln .

So machen Sie mehr mit Python:

  • So arbeiten Sie mit dem Datentyp der Python-Liste
  • So verpacken Sie Python-Apps mit BeeWare Briefcase
  • Wie man Anaconda neben anderen Pythons laufen lässt
  • Verwendung von Python-Datenklassen
  • Beginnen Sie mit Async in Python
  • So verwenden Sie Asyncio in Python
  • 3 Schritte zu einer asynchronen Python-Überholung
  • Verwendung von PyInstaller zum Erstellen von ausführbaren Python-Dateien
  • Cython-Tutorial: So beschleunigen Sie Python
  • So installieren Sie Python auf intelligente Weise
  • So verwalten Sie Python-Projekte mit Poetry
  • So verwalten Sie Python-Projekte mit Pipenv
  • Virtualenv und venv: Erklärte virtuelle Python-Umgebungen
  • Python virtualenv und venv tun und nicht tun
  • Python-Threading und Unterprozesse erklärt
  • Verwendung des Python-Debuggers
  • Verwendung von timeit zum Profilieren von Python-Code
  • Verwendung von cProfile zum Profilieren von Python-Code
  • So konvertieren Sie Python in JavaScript (und wieder zurück)