Ein Kopf ist nicht genug: Facebooks Hydra ist ein Framework für Konfigurationen

Das Hydra-Framework hilft beim Erstellen und Verwalten von Konfigurationen für Python-Anwendungen.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Ein Kopf ist nicht genug: Facebooks Hydra ist ein Framework für Python
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Facebook entwickelt mit Hydra ein Werkzeug zum Verwalten von Konfigurationen für Python-Applikationen. Das Open-Source-Framework setzt auf Python ab 3.5 und arbeitet auch mit Python 2.7 zusammen. Es soll Entwicklern helfen, Boilerplate-Code zum Steuern der Parameter zu vermeiden. Als Grundlage dient das ebenfalls quelloffene Konfigurierungssystem OmegaConf.

Mit dem Framework lassen sich dynamische Konfigurationen für Applikationen erstellen. Hydra verarbeitet beliebige Kommandozeilenparameter und wandelt sie in Konfigurationsobjekte um. Letztere sind hierarchisch organisiert, und die einzelnen Ebenen lassen sich durch .-Trennung bei den Parametern angeben. So ergibt der in der Dokumentation aufgeführte Aufruf einer Beispielanwendung mit folgender Zeile:

python my_app.py db.driver=mysql db.user=omry db.pass=secret

drei Werte für Konfigurationsobjekte, die in der Unterstruktur db abgelegt sind:

db:
driver: mysql
pass: secret
user: omry

Die Konfiguration lässt sich in einer YAML-Datei ablegen, die den Objekten ebenso die Werte zuweist wie einzelne Parameter.

Standardmäßig ist für Hydra der strict-Mode aktiviert, der überprüft, ob die Anwendung die übergebenen Konfigurationsobjekte kennt. Ansonsten bricht die Anwendung sowohl bei Kommandozeilenparametern als auch bei Konfigurationsdateien mit einer Fehlermeldung ab. Ist im @hydra.main-Decorator strict = false angegeben, läuft die Anwendung auch bei der Übergabe nicht vorhandener Objekte weiter.

Ein wichtiges Konzept von Hydra sind die Konfigurationsguppen. Darüber lassen sich Konfigurationen definieren, die sich gegenseitig ausschließen. Entwickler können eine Anwendung so für den Einsatz mit unterschiedlichen Backends vorkonfigurieren und über die Kommandozeile die jeweilige Infrastruktur vorgeben. Über defaults können sie in der Konfigurationsdatei eine Gruppe als Standard vorgeben.

Das Konfigurationssystem lässt sich seinerseits relativ flexibel konfigurieren. Diverse Variablen erlauben die Anpassung zur Laufzeit. Beispielsweise beschreibt hydra.job.name den Namen des ausgeführten Jobs, der standardmäßig dem Dateinamen der ausgeführten Python-Datei entspricht. Auch die Art, wie Hydra Log-Dateien erstellt, lässt sich anpassen und um eigene Formatierungen ergänzen.

Die Hydra-Konfigurationen lassen sich zusammen mit der Anwendung in Pakete packen, um sie gemeinsam über den pip zu verwalten. Außerdem bietet Hydra ein Plug-in-Konzept zur Erweiterung. Zu den grundlegenden Plug-in-Typen gehören Launcher, um Anwendungen an die jeweilige Umgebung anzupassen, Sweeper, um Kommandozeilenparameter auszuwerten und anschließend mehrere Jobs zu erstellen und Plug-ins zum Anpassen des Konfigurationspfads.

Weitere Informationen zum Projekt lassen sich der offiziellen Webseite entnehmen. Die Entwicklung findet quelloffen auf GitHub statt. Hydra steht unter der MIT-Lizenz und hat seit dem 1. Oktober die Versionsnummer 0.9.0. (rme)