Configs. Alle speichern sie auf unterschiedliche Weise. Jemand in .yaml
, jemand in .ini
und jemand im Quellcode, der denkt, dass der "Django Path" mit seinen settings.py
wirklich gut ist.
In diesem Artikel möchte ich versuchen, die (wahrscheinlichste) ideale Methode zum Speichern und Verwenden von Konfigurationsdateien in Python zu finden. Nun, teile auch deine Bibliothek für sie :)
Versuch Nummer 1
Was ist mit dem Speichern der Konfiguration im Code? Nun, was ist praktisch, und Sie müssen keine neuen Sprachen lernen. Es gibt viele Projekte, in denen diese Methode angewendet wird, und ich möchte sagen, ziemlich erfolgreich.
Eine typische Konfiguration in diesem Stil sieht folgendermaßen aus:
Es sieht gut aus Nur eines ist bedenklich, warum werden Sicherheitsdaten im Code gespeichert? Wie werden wir das begehen? Das Rätsel. Abgesehen davon, .gitignore
unsere Datei in .gitignore
ist, ist dies natürlich keine Lösung.
Wie auch immer, warum sind zumindest einige Daten im Code gespeichert? Wie mir der Code scheint, ist es auch ein Code, der eine Art Logik ausführen und keine Daten speichern muss.
Dieser Ansatz wird tatsächlich häufig verwendet. Im selben Django. Jeder denkt, dass dies das beliebteste Framework ist, das auf Instagram verwendet wird, und dass er keine schlechten Ratschläge gibt. Schade, dass dem nicht so ist.
Ein bisschen mehr dazu .
Versuch Nummer 2
Nun, da wir entschieden haben, dass das Speichern von Daten im Code nicht cool ist, suchen wir nach einer Alternative. Für Konfigurationsdateien wurde eine beträchtliche Anzahl von verschiedenen Formaten erfunden, toml
große Popularität erlangt.
Aber wir werden mit dem beginnen, was Python selbst uns bietet - .ini
. Die Standardbibliothek verfügt über eine configparser
Bibliothek.
Unsere Konfiguration, die wir bereits früher geschrieben haben:
# settings.ini [Twitter] username="johndoe" password="johndoespassword" token="....."
Lesen Sie jetzt in Python:
import configparser
Alle Probleme sind gelöst. Daten werden nicht im Code gespeichert, der Zugriff ist einfach. Aber ... und wenn wir andere Konfigurationen lesen müssen, yaml
zum Beispiel json
oder yaml
oder alles auf einmal. Natürlich gibt es json
in der Standardbibliothek und pyyaml
, aber Sie müssen dafür eine Menge ( pyyaml
oder nicht wirklich) Code schreiben.
Dokumentation
Versuch Nummer 3
Und jetzt möchte ich Ihnen meine Bibliothek zeigen, die darauf ausgelegt ist, all diese Probleme zu lösen (oder zumindest Ihr Leid zu lindern :)).
Es heißt betterconf
und ist auf PyPi verfügbar.
Die Installation ist so einfach wie bei jeder anderen Bibliothek:
pip install betterconf
Zunächst wird unsere Konfiguration als Klasse mit Feldern dargestellt:
Standardmäßig versucht die Bibliothek, Werte von Umgebungsvariablen zu übernehmen. Wir können dies jedoch auch konfigurieren:
from betterconf import Config, field from betterconf.config import AbstractProvider import json class JSONProvider(AbstractProvider):
Aus diesem Beispiel folgt, dass wir verschiedene Anbieter verwenden können , um Daten zu empfangen. Und es ist wirklich manchmal praktisch, sage ich aus eigener Erfahrung.
Nun, was ist, wenn wir boolesche Werte oder Zahlen in den Configs haben, werden sie irgendwann sowieso in Strings kommen. Und dafür gibt es eine Lösung:
from betterconf import Config, field
Daher werden alle Werte, die Booleschen Typen ähnlich sind (nämlich true
und false
, in einen Python- bool
konvertiert. Dabei wird die Groß- und Kleinschreibung nicht berücksichtigt.
Es ist auch einfach, einen Caster zu schreiben:
from betterconf.caster import AbstractCaster class DashToDotCaster(AbstractCaster): def cast(self, val): return val.replace("-", ".")
Github-Repository mit detaillierterer Dokumentation .
Zusammenfassung
Daher kamen wir zu dem Schluss, dass das Speichern der Einstellungen im Quellcode nicht gut ist. Hierfür wurden bereits verschiedene Formate erfunden. Nun, und Sie haben sich mit einer anderen nützlichen (wie ich finde :)) Bibliothek getroffen.
PS
Ja, Sie könnten auch Pydantic
, aber ich glaube, dass es für solche Aufgaben zu leicht ist.