Prompt Flow als ausführbare App verteilen#

Wir verwenden die web-classification als Beispiel, um zu zeigen, wie man Prompt Flow mit Pyinstaller als ausführbare App verteilt.

Bitte stellen Sie sicher, dass Sie alle erforderlichen Abhängigkeiten installiert haben. Sie können den Abschnitt „Voraussetzungen“ in der README-Datei der web-classification für eine umfassende Liste der Voraussetzungen und Installationsanweisungen konsultieren. Wir empfehlen Ihnen außerdem, eine requirements.txt hinzuzufügen, um alle erforderlichen Abhängigkeiten für jeden Flow anzugeben.

Pyinstaller ist ein beliebtes Werkzeug zur Konvertierung von Python-Anwendungen in eigenständige ausführbare Dateien. Es ermöglicht Ihnen, Ihre Python-Skripte zu einer einzigen ausführbaren Datei zu bündeln, die auf einem Zielrechner ausgeführt werden kann, ohne dass der Python-Interpreter installiert sein muss. Streamlit ist eine Open-Source-Python-Bibliothek zur schnellen und einfachen Erstellung von Webanwendungen. Sie wurde für Datenwissenschaftler und Ingenieure entwickelt, die Datenskripte mit minimalem Aufwand in teilbare Web-Apps umwandeln möchten. Wir verwenden Pyinstaller, um den Flow zu bündeln, und Streamlit, um benutzerdefinierte Web-Apps zu erstellen. Stellen Sie vor der Verteilung des Workflows sicher, dass Sie diese installiert haben.

Einen Flow als ausführbares Format erstellen#

Beachten Sie, dass alle abhängigen Verbindungen erstellt werden müssen, bevor Sie sie als ausführbare Datei erstellen.

# create connection if not created before
pf connection create --file ../../../examples/connections/azure_openai.yml --set api_key=<your_api_key> api_base=<your_api_base> --name open_ai_connection

Verwenden Sie den folgenden Befehl, um einen Flow als ausführbares Format zu erstellen

pf flow build --source <path-to-your-flow-folder> --output <your-output-dir> --format executable

Ordnerstruktur des ausführbaren Formats#

Exportierte Dateien & deren Abhängigkeiten befinden sich im selben Ordner. Die Struktur ist wie folgt:

  • flow: Der Ordner enthält alle Flow-Dateien.

  • connections: Der Ordner enthält YAML-Dateien zum Erstellen aller zugehörigen Verbindungen.

  • app.py: Die Einstiegsdatei ist als Einstiegspunkt für die gebündelte Anwendung enthalten.

  • app.spec: Die Spec-Datei teilt PyInstaller mit, wie Ihr Skript verarbeitet werden soll.

  • main.py: Startet den Streamlit-Dienst und wird von der Einstiegsdatei aufgerufen.

  • settings.json: Eine JSON-Datei zum Speichern der Einstellungen der ausführbaren Anwendung.

  • build: Ein Ordner, der verschiedene Protokoll- und Arbeitsdateien enthält.

  • dist: Ein Ordner, der die ausführbare Anwendung enthält.

  • README.md: Eine einfache Einführung in die Dateien.

Eine Vorlagenskript der Einstiegsdatei#

PyInstaller liest eine von Ihnen geschriebene Spec-Datei oder ein Python-Skript. Es analysiert Ihren Code, um alle anderen Module und Bibliotheken zu erkennen, die Ihr Skript zum Ausführen benötigt. Dann sammelt es Kopien all dieser Dateien, einschließlich des aktiven Python-Interpreters, und legt sie zusammen mit Ihrem Skript in einem einzigen Ordner oder optional in einer einzigen ausführbaren Datei ab.

Wir stellen ein Python-Einstiegsskript namens app.py als Einstiegspunkt für die gebündelte App bereit, mit dem Sie einen Flow-Ordner als Endpunkt bereitstellen können.

Eine Vorlagenskript der Spec-Datei#

Die Spec-Datei teilt PyInstaller mit, wie Ihr Skript verarbeitet werden soll. Sie kodiert die Skriptnamen und die meisten Optionen, die Sie dem pyinstaller-Befehl übergeben. Die Spec-Datei ist eigentlich ausführbarer Python-Code. PyInstaller erstellt die App, indem es den Inhalt der Spec-Datei ausführt.

Um diesen Prozess zu optimieren, bieten wir eine app.spec.jinja2 Spec-Vorlagendatei an, die die Anwendung in einer einzigen Datei bündelt. Weitere Informationen zu Spec-Dateien finden Sie unter Using Spec Files. Bitte ersetzen Sie streamlit_runtime_interpreter_path durch den Pfad des Streamlit-Runtime-Interpreters in Ihrer Umgebung.

Die gebündelte Anwendung mit Pyinstaller#

Nachdem Sie einen Flow gemäß Einen Flow als ausführbares Format erstellen als ausführbares Format erstellt haben. Es werden zwei Ordner namens build und dist in Ihrem angegebenen Ausgabeverzeichnis erstellt, bezeichnet als. Der Ordner build enthält verschiedene Protokoll- und Arbeitsdateien, während der Ordner dist die ausführbare Anwendung app enthält.

Verbindungen#

Wenn der Dienst Verbindungen beinhaltet, werden alle zugehörigen Verbindungen als YAML-Dateien exportiert und im ausführbaren Paket neu erstellt. Geheimnisse in Verbindungen werden nicht direkt exportiert. Stattdessen exportieren wir sie als Referenz auf Umgebungsvariablen.

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/OpenAIConnection.schema.json
type: open_ai
name: open_ai_connection
module: promptflow.connections
api_key: ${env:OPEN_AI_CONNECTION_API_KEY} # env reference

Testen des Endpunkts#

Schließlich können Sie die gebündelte Anwendung app an andere Personen verteilen. Diese können Ihr Programm ausführen, indem sie doppelt auf die ausführbare Datei doppelklicken, z. B. app.exe unter Windows, oder die Binärdatei ausführen, z. B. app unter Linux.

Der Entwicklungsserver verfügt über eine integrierte Webseite, auf der sie den Flow testen können, indem sie „https://:8501“ im Browser öffnen. Das erwartete Ergebnis ist wie folgt: Wenn der Flow erfolgreich bereitgestellt wurde, bleibt der Prozess am Leben, bis er manuell beendet wird.

Für Ihre Benutzer ist die App in sich geschlossen. Sie müssen keine bestimmte Python-Version oder Module installieren. Sie benötigen keinerlei Python-Installation.

Hinweis: Die generierte ausführbare Datei ist nicht plattformübergreifend. Eine unter einer Plattform (z. B. Windows) erstellte ausführbare Datei kann nicht auf anderen Plattformen (Mac, Linux) ausgeführt werden.

Bekannte Probleme#

  1. Beachten Sie, dass Python 3.10.0 einen Fehler enthält, der es für PyInstaller ununterstützbar macht. PyInstaller funktioniert auch nicht mit Beta-Versionen von Python 3.13.

Nächste Schritte#

  • Probieren Sie das Beispiel hier aus