Wie man ein CLI mit Python Fire auf Ubuntu 22.04 erstellt
Einführung
Python Fire ist eine Python-Bibliothek, die es Ihnen ermöglicht, automatisch CLIs (Command Line Interfaces) aus Python-Objekten zu erstellen. CLIs sind Programme, die Texteingaben von der Befehlszeile entgegennehmen und hilfreich für Ihren Workflow bei der Entwicklung und Fehlersuche sein können. Dies kann nützlich sein für diejenigen, die sich in Bash und an der Befehlszeile wohler fühlen.
Während die traditionelle Methode, argparse aus der Standardbibliothek von Python zu verwenden, dasselbe erreichen kann, wird mit Python Fire das Prototyping und die Wartung erheblich verbessert. Wenn Sie die volle Kontrolle wünschen, sehen Sie sich dieses Tutorial an, wie Sie argparse verwenden, um Befehlszeilenprogramme in Python zu schreiben.
In diesem Tutorial werden Sie Python Fire installieren und verwenden, um benutzerdefinierte CLIs zu erstellen. Diese CLIs können erstellt werden, ohne dass der Python-Quellcode berührt werden muss. Alternativ werden Sie für detailliertere Skripte, die direkt mit Ihren Funktionen und Klassen verbunden sind, Python Fire importieren und damit in Ihrem eigenen Code arbeiten.
Voraussetzungen
- Ein Ubuntu 22.04-Server, eingerichtet gemäß unserem anfänglichen Servereinrichtungsleitfaden für Ubuntu 22.04, mit einem nicht-root-Benutzer mit
sudo-Rechten und einer aktivierten Firewall. - Die neueste Version von Python 3 auf Ihrem Computer installiert, mit einer erstellten virtuellen Umgebung, die beschreibt, wie man Python 3 installiert und eine Programmierumgebung auf einem Ubuntu 22.04-Server einrichtet.
- Eine Vertrautheit mit der Programmiersprache Python und wie man darin programmiert. Ein guter Einstieg wäre diese Serie, wie man in Python 3 programmiert.
Schritt 1 — Python Fire installieren
Python Fire wird auf PyPI gehostet und kann mit pip installiert werden. Nachdem Sie die Voraussetzungen zur Installation von Python 3 erfüllt haben, sollten Sie eine virtuelle Umgebung erstellt und aktiviert haben. Wenn Sie sie nicht aktiviert haben, navigieren Sie zu Ihrem Umgebungsverzeichnis:
- cd environments
Aktivieren Sie dann Ihre virtuelle Umgebung:
- source my_env/bin/activate
Dies stellt sicher, dass Ihre Installation von fire die globalen pip-Installationen nicht beeinflusst. Darüber hinaus können pip-Installationen auf globaler Ebene unvorhersehbar mit Paketmanagern wie apt interagieren. Aktivieren Sie Ihre virtuelle Umgebung und installieren Sie fire:
- pip install fire
fire kann auf verschiedene Weise aufgerufen werden, einschließlich über die Kommandozeile, ohne dass Änderungen an Ihren Python-Programmen erforderlich sind. Als Nächstes werden Sie diese Methode erkunden, sowie später die konventionellen Verwendungen von Python Fire, indem Sie es zu Ihrem tatsächlichen Code hinzufügen, um eine granularere Kontrolle zu ermöglichen.
Schritt 2 — Erstellen einer CLI aus einem Programm ohne Codeerweiterungen
Zuerst richten Sie Ihre Python-Datei ein. Dies kann als Datei, Programm oder Skript bezeichnet werden, was alles korrekt ist.
Um Ihre neue Datei zu erstellen, verwenden Sie nano oder Ihren bevorzugten Texteditor:
- nano example.py
Fügen Sie den folgenden Python-Code in Ihre neue Datei ein:
def my_name(name):
return "My name is {name}".format(name=name)
Speichern Sie Ihre Datei und beenden Sie sie. Mit nano tun Sie dies, indem Sie CTRL+O und dann CTRL+X drücken.
Dies ist eine Python-Funktion namens my_name, die ein Argument mit dem Namen name übernimmt. Wenn Sie diese Funktion mit der erforderlichen Variablen aufrufen, wird die name Variable in einen Satz mithilfe der Python-String-Formatierung eingefügt. Wenn Sie diesen Code in einem Python-Interpreter ausführen würden, mit sammy als der Variablen, würde es “Mein Name ist sammy” ausgeben.
Mit Python Fire können Sie diesen vorhandenen Python-Code in einen CLI-Befehl umwandeln und diesen Code ausführen, während Sie eine Variable einfügen, ohne auf das Schreiben von Python-Code zurückzugreifen, um ihn aufzurufen. Geben Sie Ihren neuen CLI-Befehl ein, wobei Sie -m verwenden, um ihn als Python-Modul aufzurufen:
- python -m fire example my_name --name=sammy
My name is sammy
Hier geben Sie example als das Python-Programm an, das Sie ausführen möchten, wobei my_name die Funktion ist, die Sie speziell ausführen möchten. Da my_name eine Funktion ist, die ein Argument namens name benötigt, geben Sie das Argument mit dem --name Schalter an.
Ohne Änderungen an deinem Python-Code hast du eine einfache, funktionierende CLI erstellt.
Schritt 3 — Erstellen eines CLI aus einem Programm mit importiertem fire
Die konventionellere Methode zur Verwendung von Python Fire besteht darin, fire in Ihren Code zu importieren. Dies ermöglicht eine granularere Kontrolle und eine komplexere Strukturierung Ihres Codes für die Verwendung innerhalb einer CLI.
Öffne deine example.py und füge den folgenden Code ein:
import fire
def my_name(name):
return "My name is {name}".format(name=name)
if __name__ == '__main__':
fire.Fire()
Es gibt zwei bemerkenswerte Änderungen am ursprünglichen Code. fire wird am Anfang importiert. Es wird später am Ende mit einem Aufruf von fire.Fire() aufgerufen, was die CLI-Funktionalität aktiviert. Dies geschieht nur, wenn das Python-Programm direkt vom Benutzer ausgeführt wird und nicht, wenn diese Datei in ein anderes Python-Skript importiert wird. Die Funktion my_name selbst bleibt unverändert.
Speichern und Ihre Datei verlassen.
Jetzt können Sie Ihre CLI verwenden, indem Sie diesen Befehl eingeben:
- python example.py my_name sammy
My name is sammy
Da fire jetzt zu Beginn in deinen Python-Code importiert wird, musst du das fire-Modul nicht mehr innerhalb deines Befehls über python -m aufrufen. Stattdessen kannst du deine CLI direkt über die Datei aufrufen und Argumente für den Funktionsnamen und die Variable bereitstellen.
Dies bietet ein saubereres CLI-Erlebnis auf Kosten der Notwendigkeit, Änderungen an Ihrem tatsächlichen Code vorzunehmen. Als Nächstes werden Sie eine CLI direkt aus einer Funktion erstellen, anstatt aus dem gesamten Python-Programm.
Schritt 4 — Erstellen einer CLI aus einer Funktion
Anstatt alle Funktionen in Ihrem Programm Ihrer CLI zur Verfügung zu stellen, können Sie wählen, eine CLI aus bestimmten Funktionen zu erstellen. Fügen Sie Folgendes in Ihre example.py ein:
import fire
def my_name(name):
return "My name is {name}".format(name=name)
def my_full_name(first_name, last_name):
return "My name is {first_name} {last_name}".format(first_name=first_name, last_name=last_name)
if __name__ == '__main__':
fire.Fire(my_name)
Speichern und Ihre Datei verlassen.
Diesmal gibt es zwei Funktionen. Es gibt die ursprüngliche my_name-Funktion und jetzt eine zweite my_full_name-Funktion. Die my_full_name-Funktion ist ein wenig anders, da sie zwei Argumente annimmt, was Python Fire die Flexibilität bietet, dies zuzulassen. Sie wird später in diesem Tutorial verwendet werden.
Zusätzlich, wenn fire.Fire am Ende aufgerufen wird, nimmt es jetzt ein Argument. Um eine Funktion anzugeben, die Sie verwenden möchten, fügen Sie sie hier als Argument hinzu. In diesem Beispiel wird my_name die Funktion sein, die Sie für Ihre CLI anvisieren.
Da Sie die zu verwendende Funktion in der CLI angegeben haben, müssen Sie in der Befehlszeile nur das Programm und das Argument angeben, die zum Ausführen der Funktion benötigt werden:
- python example.py sammy
My name is sammy
Beachten Sie, dass im Output nur die my_name Funktion zurückgegeben wird, wie Sie es angegeben haben. Die neue my_full_name Funktion bleibt unberührt.
Sie können jedoch mehrere Funktionen für Ihre CLI bereitstellen. Dazu übergeben Sie ein Python-Wörterbuch an den fire.Fire Aufruf. Die Verwendung eines Wörterbuchs als Schlüssel-Wert-Datenstruktur ermöglicht es Ihnen, mehrere Funktionen für Ihre CLI anzugeben. Dieses Wörterbuch enthält alle Funktionen, die Sie in Ihrer CLI verwenden möchten. Fügen Sie Folgendes in example.py ein:
import fire
def my_name(name):
return "My name is {name}".format(name=name)
def my_full_name(first_name, last_name):
return "My name is {first_name} {last_name}".format(first_name=first_name, last_name=last_name)
if __name__ == '__main__':
fire.Fire({
'my_name': my_name,
'my_full_name': my_full_name,
})
Jetzt können Sie die erste Funktion über Ihre CLI aufrufen:
- python example.py my_name sammy
My name is sammy
Oder Sie können Ihre zweite Funktion aufrufen:
- python example.py my_full_name sammy shark
My name is sammy shark
Die eine Änderung diesmal ist das Übergeben des Wörterbuchs. Mit dem Wörterbuch können Sie entweder die Funktion aus Ihrer CLI aufrufen. Als nächstes werden Sie eine CLI aus einer Python-Klasse erstellen, anstatt aus einer Funktion.
Schritt 5 — Erstellen einer CLI aus einer Klasse
Wie Sie Ihren Code strukturieren, sei es in Klassen oder nur Funktionen, ist eine Frage der Präferenz und der persönlichen Einhaltung bewährter Praktiken. Ein CLI aus Klassen mit Python Fire zu erstellen, ist nicht drastisch anders als mit Funktionen.
Um eine Klasse zu erstellen, werden Sie Ihren Code umstrukturieren und Ihre Funktionen als Teil der Klasse darin platzieren. Fügen Sie Folgendes in example.py ein.
import fire
class Namer(object):
def my_name(self, name):
return "My name is {name}".format(name=name)
def my_full_name(self, first_name, last_name):
return "My name is {first_name} {last_name}".format(first_name=first_name, last_name=last_name)
if __name__ == '__main__':
fire.Fire(Namer)
Jetzt, trotz der Umstrukturierung Ihres Codes zur Verwendung von Klassen, können Sie denselben Befehl aus dem vorherigen Schritt verwenden, um die erste Funktion über Ihre CLI aufzurufen:
- python example.py my_name sammy
My name is sammy
Oder Sie können Ihre zweite Funktion aufrufen:
- python example.py my_full_name sammy shark
My name is sammy shark
Die erstellte CLI ist funktional identisch und verwendet die exacten gleichen Befehle wie der vorherige Schritt. Der fire.Fire Aufruf ist ebenfalls der gleiche. Das einzige, was sich geändert hat, ist die Umstrukturierung des Codes zur Verwendung von Klassen.
Python Fire passt sich Ihren Vorlieben an und ermöglicht es Ihnen, auf die von Ihnen bevorzugte Weise zu programmieren, indem Sie Klassen oder reguläre Funktionen verwenden.
Schlussfolgerung
In diesem Tutorial haben Sie Python Fire installiert und verschiedene Möglichkeiten erkundet, Ihre eigenen benutzerdefinierten CLIs mit Python-Programmen, -Funktionen und -Klassen zu erstellen. Für einen noch tieferen Einblick werfen Sie einen Blick in die offizielle Dokumentation. Und für einen alternativen Ansatz zur Erstellung von Python-CLIs schauen Sie sich den Leitfaden an, wie man argparse verwendet, um Befehlszeilenprogramme in Python zu schreiben.
