Finden des perfekten Toolkits: Analysieren beliebter Python-Projektvorlagen

Das Material, dessen Übersetzung wir heute veröffentlichen, ist der Geschichte der Tools gewidmet, die zum Erstellen von Python-Anwendungen verwendet werden. Es richtet sich an Programmierer, die die Kategorie der Anfänger bereits verlassen haben, aber die Kategorie der erfahrenen Python-Entwickler noch nicht erreicht haben. Für diejenigen, die mit dem Üben beginnen möchten , empfiehlt der Autor die Verwendung von Flake8 , Pytest und Sphinx in bestehenden Python-Projekten . Er empfiehlt auch einen Blick auf Pre-Commit , Black und Pylint . Diejenigen, die planen, ein neues Projekt zu starten, rät er, auf Poesie und Dependabot zu achten .





Überblick


Es war immer schwierig für mich, eine objektive Meinung über die „Best Practices“ der Python-Entwicklung zu bilden. In der Welt der Technologie tauchen ständig einige beliebte Trends auf, die oft nicht lange existieren. Dies erschwert die Extraktion des „Nutzsignals“ aus dem Informationsrauschen.

Die frischesten Werkzeuge sind oft nur sozusagen auf Papier gut. Können sie dem praktischen Programmierer wirklich mit etwas helfen? Oder führt ihre Anwendung nur zur Einführung von etwas Neuem in das Projekt, dessen Leistung beibehalten werden muss, was mehr Schwierigkeiten als Vorteile mit sich bringt?

Ich hatte kein klares Verständnis dafür, was genau ich als "Best Practices" der Entwicklung betrachtete. Ich nehme an, ich fand etwas Nützliches, das hauptsächlich auf episodischen Beweisen für "Nützlichkeit" beruhte und gelegentlich in Gesprächen erwähnt wurde. In den letzten Wochen habe ich beschlossen, die Dinge in dieser Angelegenheit in Ordnung zu bringen. Zu diesem Zweck begann ich, alle Vorlagen von Python-Projekten zu analysieren, die ich finden konnte (es handelt sich um Vorlagen, die vom Befehlszeilenprogramm cookiecutter verwendet werden , um darauf basierende Python-Projekte zu erstellen).

Es schien mir sehr interessant zu erfahren, welche Hilfstools die Vorlagenautoren für würdig halten, diese Tools in neue Python-Projekte zu integrieren, die auf der Grundlage dieser Vorlagen erstellt wurden.

Ich habe die 18 beliebtesten Vorlagenprojekte (von 76 bis 6300 Sternen auf GitHub) analysiert und verglichen, wobei ich besonders darauf geachtet habe, welche Art von Hilfstools sie verwenden. Die Ergebnisse dieser Analyse finden Sie in dieser Tabelle.

Im Folgenden möchte ich die wichtigsten Schlussfolgerungen mitteilen, die ich bei der Analyse beliebter Vorlagen gezogen habe.

De-facto-Standards


Die in diesem Abschnitt beschriebenen Tools sind in mehr als der Hälfte der Vorlagen enthalten. Dies bedeutet, dass sie in einer großen Anzahl von echten Python-Projekten als Standard wahrgenommen werden.

▍Flake8


Ich benutze Flake8 schon seit einiger Zeit , wusste aber nicht, welche beherrschende Stellung dieses Tool im Bereich des Flusens einnimmt. Ich dachte, dass es in einer Art Wettbewerb existiert, aber die überwiegende Mehrheit der Projektvorlagen verwendet es.

Ja, das ist nicht überraschend. Es ist schwierig, der Bequemlichkeit, die gesamte Codebasis des Projekts in Sekundenschnelle zu färben, etwas entgegenzusetzen. Diejenigen, die die neuesten Entwicklungen nutzen möchten, können einen Blick auf wemake-python-styleguide empfehlen . Dies ist so etwas wie "Flake8 auf Steroiden". Dieses Tool kann durchaus zur Übertragung veralteter anderer ähnlicher Tools (wie Pylint) beitragen.

▍Pytest und Coverage.py


Die überwiegende Mehrheit der Vorlagen verwendet Pytest . Dies reduziert die Verwendung des Standard-Test-Frameworks. Pytest sieht noch attraktiver , wenn sie mit kombinierten tox . Genau das wurde in etwa der Hälfte der Vorlagen getan. Die Codeabdeckung mit Tests wird am häufigsten mit Coverage.py überprüft .

PhSphinx


Die meisten Vorlagen verwenden Sphinx , um Dokumentation zu erstellen . Zu meiner Überraschung wird MkDocs selten für diesen Zweck verwendet.

Daher können wir sagen, dass Sie die Einführung von Flake8, Pytest und Sphinx in Betracht ziehen sollten, wenn Sie Flake8, Pytest und Sphinx nicht verwenden.

Vielversprechende Werkzeuge


In diesem Abschnitt habe ich die Werkzeuge und Arbeitstechniken zusammengestellt, deren Verwendung in den Vorlagen einige Trends nahelegte. Der Punkt ist, dass all dies zwar nicht in den meisten Projektvorlagen enthalten ist, aber in vielen relativ neuen Vorlagen enthalten ist. Also - all das ist es wert, beachtet zu werden.

▍Pyproject.toml


Die Verwendung von pyproject.tomlDateien wird in PEP 518 empfohlen . Dies ist ein moderner Mechanismus zum Festlegen der Anforderungen an die Projektmontage. Es wird in den meisten relativ jungen Vorlagen verwendet.

▍Poesie


Obwohl das Python-Ökosystem in Bezug auf ein gutes Werkzeug zum Verwalten von Abhängigkeiten nicht gut ist, glaube ich mit vorsichtigem Optimismus, dass Poesie ein Analogon von npm aus der JavaScript-Welt in der Python-Welt werden könnte .

Die jüngsten (aber dennoch beliebten) Projektvorlagen scheinen mit meiner Idee übereinzustimmen. Es stimmt, es ist erwähnenswert, dass jemand, der an einer Bibliothek arbeitet, die er über PyPI verteilen kann , immer noch Setuptools verwenden muss . (Es sollte beachtet werden, dass ich nach der Veröffentlichung dieses Materials informiert wurde, dass dies anscheinend kein Problem mehr ist).

Seien Sie auch vorsichtig, wenn Ihr Projekt (dasselbe gilt für Abhängigkeiten) auf Conda basiert. In diesem Fall passt Poetry nicht zu Ihnen, da dieses Tool in seiner aktuellen Form den Entwickler an pip und virtualenv bindet .

EpDependabot


Dependabot überprüft regelmäßig Projektabhängigkeiten auf Veralterung und versucht, dem Entwickler zu helfen, indem PR automatisch geöffnet wird.

Persönlich habe ich dieses Tool in letzter Zeit öfter als zuvor gesehen. Es scheint mir, dass es ein ausgezeichnetes Werkzeug ist, dessen Hinzufügung zum Projekt das Projekt sehr positiv beeinflusst. Dependabot hilft dabei, Sicherheitsrisiken zu reduzieren, indem Entwickler dazu gedrängt werden, Abhängigkeiten auf dem neuesten Stand zu halten.

Aus diesem Grund rate ich Ihnen, Poetry und Dependabot nicht aus den Augen zu verlieren. Erwägen Sie, diese Tools in Ihr nächstes Projekt aufzunehmen.

Persönliche Empfehlungen


Die Analyse der Projektvorlagen gab mir eine etwas ambivalente Wahrnehmung der Werkzeuge, die ich in diesem Abschnitt auflisten werde. In jedem Fall möchte ich diesen Abschnitt verwenden, um aufgrund meiner eigenen Erfahrung darüber zu sprechen. Zu einer Zeit waren sie sehr nützlich für mich.

▍Pre-Commit


Selbst wenn Sie äußerst diszipliniert sind, verschwenden Sie Ihre Energie nicht damit, einfache Routinemaßnahmen wie zusätzlichen Code auszuführen, der durch den Linter ausgeführt wird, bevor Sie den Code an das Repository senden. Ähnliche Aufgaben können an Pre-Commit übergeben werden . Und es ist besser, Ihre Energie für TDD und für die Teamarbeit am Code aufzuwenden.

YlPylint


Obwohl Pylint als langsam kritisiert wird, obwohl dieses Tool wegen der Funktionen seiner Einstellungen kritisiert wird, kann ich sagen, dass es mir erlaubt hat, im Bereich der Programmierung über mich selbst hinauszuwachsen .

Er gibt mir spezifische Anweisungen zu den Teilen des Codes, die ich verbessern kann, und erklärt mir, wie ich den Code besser an die Regeln anpassen kann. Für ein kostenloses Tool ist dies allein schon sehr viel. Daher bin ich bereit, die mit Pylint verbundenen Unannehmlichkeiten in Kauf zu nehmen.

»Schwarz


Schwarz an der Wurzel der Debatte darüber, wo Leerzeichen in den Code eingefügt werden sollen. Dies schützt unsere Teams vor leerem Gespräch und vor bedeutungslosen Unterschieden in Dateien, die durch unterschiedliche Editoreinstellungen verursacht werden.

In meinem Fall wird dadurch aufgehellt, was ich persönlich in Python nicht mag (die Notwendigkeit, viele Leerzeichen zu verwenden). Darüber hinaus ist anzumerken, dass das Black-Projekt 2019 der Python Software Foundation beigetreten ist, was auf die Ernsthaftigkeit und Qualität dieses Projekts hinweist.

Daher möchte ich sagen, dass Black und Pylint, wenn Sie immer noch kein Pre-Commit verwenden, darüber nachdenken, ob diese Tools Ihrem Team zugute kommen können.

Zwischensummen


Zwölf der achtzehn untersuchten Vorlagen wurden mit dem Cookie-Cutter- Framework erstellt . Einige dieser Vorlagen, bei denen dieses Framework nicht verwendet wird, weisen interessante Eigenschaften auf.

Angesichts der Tatsache, dass der Ausstecher das führende Framework für die Erstellung von Projektvorlagen ist, sollten diejenigen, die sich für eine Vorlage entscheiden, die keinen Ausstecher verwendet, sehr gute Gründe dafür haben. Eine solche Entscheidung sollte sehr gut begründet sein.

Diejenigen, die nach einer Vorlage für ihr Projekt suchen, sollten eine Vorlage auswählen, die ihrer eigenen Sicht der Dinge am ehesten entspricht. Wenn Sie beim Erstellen von Projekten nach einer bestimmten Vorlage diese ständig auf dieselbe Weise neu konfigurieren müssen, sollten Sie darüber nachdenken, eine solche Vorlage zu verzweigen und zu finalisieren, inspiriert von Beispielen für Vorlagen aus meiner Liste.

Und wenn Sie sich für Abenteuer interessieren, erstellen Sie Ihre eigene Vorlage von Grund auf neu. Cookiecutter ist eine großartige Funktion des Python-Ökosystems. Durch das einfache Erstellen von Jinja-Vorlagen können Sie schnell und einfach etwas Eigenes tun.

Bonus: Vorlagenempfehlungen


▍Django


Erwägen Sie zusammen mit den beliebtesten Django-Vorlagen die Verwendung der wemake-django-Vorlage . Es vermittelt den Eindruck eines tief durchdachten Produkts.

▍ Datenverarbeitung und -analyse


In den meisten Projekten zur Verarbeitung und Analyse von Daten ist die Cookiecutter Data Science- Vorlage hilfreich . Datenwissenschaftler sollten sich jedoch auch mit Kedro befassen .

Diese Vorlage erweitert Cookiecutter Data Science um einen Mechanismus zum Erstellen standardisierter Datenverarbeitungs-Pipelines. Es unterstützt das Laden und Speichern von Daten und Modellen. Diese Funktionen werden sehr wahrscheinlich in Ihrem nächsten Projekt eine geeignete Anwendung finden.

An dieser Stelle möchte ich mich auch bei den Erstellern der Shablona- Vorlage für die Erstellung einer sehr hochwertigen Dokumentation bedanken . Es kann für Sie nützlich sein, selbst wenn Sie sich für etwas anderes entscheiden.

▍ Vorlagen für allgemeine Zwecke


Welche Allzweckvorlage in irgendeiner Weise ausgewählt werden soll, hängt davon ab, was genau Sie basierend auf dieser Vorlage entwickeln werden - einer Bibliothek oder einer regulären Anwendung. Bei der Auswahl einer solchen Vorlage und der beliebtesten Projekte dieser Art würde ich mir Jaces Python-Vorlage sehr genau ansehen .

Dies ist kein bekanntes Muster, aber ich mag die Tatsache, dass es Poesie, Isort , Schwarz, Pylint und Mypy enthält .

PyScaffold ist eine der beliebtesten Vorlagen, die nicht auf Ausstechern basieren. Es hat viele Erweiterungen (zum Beispiel für Django und für Data Science-Projekte ). Außerdem werden mit setuptools-scm Versionsnummern von GitHub heruntergeladen. Darüber hinaus ist dies eine der wenigen Vorlagen, die Conda unterstützen.

Hier sind einige Vorlagen, die die GitHub Actions-Technologie verwenden:

  1. Die Python Best Practices Cookiecutter-Vorlage , die, wie ich erwähnen möchte, die meisten meiner Lieblingswerkzeuge enthält.
  2. Die Vorlage Blueprint / Boilerplate für Python-Projekte , die ich ziemlich interessant finde, da sie die Möglichkeit bietet, häufig auftretende Sicherheitsprobleme mit Bandit zu finden, sieht vielversprechend aus. Darüber hinaus verfügt diese Vorlage über eine bemerkenswerte Funktion, die darin besteht, dass die Einstellungen aller Tools in einer einzigen Datei zusammengefasst werden setup.cfg.

Und zum Schluss - ich empfehle einen Blick auf die wemake-python-package- Vorlage . Ich denke, es lohnt sich trotzdem. Insbesondere - wenn Ihnen die Django-Vorlage desselben Entwicklers gefällt oder wenn Sie anstelle von reinem Flake8 den erweiterten wemake-python- styleguide verwenden möchten.

Zusammenfassung


Nachdem ich diesen Artikel veröffentlicht hatte, schrieb ich Guido van Rossum darüber.

Vielleicht interessieren Sie sich wie ich für seinen Kommentar . Er sagte, dass ich mypy vergessen habe und dass es einfacher ist, nicht mit Sphinx, sondern mit Markdown zu arbeiten. In Bezug auf Schwarz stellte er fest, dass dieses Tool überbewertet ist und nur dann von Nutzen sein kann, wenn die Teammitglieder viel über Stile streiten. Ihm zufolge brauchen diejenigen, die Flake8 verwenden, Pylint nicht. Er hatte noch nie von Poetry und Dependabot gehört. Darüber hinaus empfahl er die Verwendung einer bestimmten CI-Lösung wie Travis-CI, um Tests durchzuführen.

Liebe Leser! Welche Python-Projektvorlagen verwenden Sie?


All Articles