Panel im Browser ausführen mit WASM =================================== Mit Panel könnt ihr Dashboards und andere Anwendungen in Python schreiben, auf die über einen Webbrowser zugegriffen wird. Normalerweise läuft der Python-Interpreter als separater Jupyter- oder Bokeh-Serverprozess und kommuniziert mit dem JavaScript-Code, der im Client-Browser läuft. Python kann jedoch mit :abbr:`WASM (WebAssembly)` auch direkt im Browser ausgeführt werden, ohne dass ein separater Server erforderlich ist. Panel nutzt hierfür `Pyodide `_ und für das Rendering `PyScript `_. Konvertieren von Panel-Anwendungen ---------------------------------- Zukünftige Versionen von Panel kann eure Panel-Anwendung aus ein oder mehreren Python-Skripten oder Notebook-Dateien einschließlich :doc:`templates` mit ``panel convert`` in eine HTML-Datei umwandeln. Die einzige Voraussetzungen sind: * sie importieren nur globale Module und Pakete und keine relativen Importe von anderen Skripten oder Modulen * die Bibliotheken wurden `für Pyodide kompiliert `_ oder sind als :term:`Python wheels ` auf dem :term:`Python Package Index` (:term:`PyPI`) verfügbar. Beispiel -------- In folgenden Beispiel werden wir das :doc:`deploy`-Notebook in eine eigenständige HTML-Seite konvertieren mit .. code-block:: console $ uv run panel convert deploy.ipynb --out pyodide Column [0] Column [0] FloatSlider(end=3.0, name='frequency', start=-1.0, value=1.0) [1] FloatSlider(end=3.0, name='amplitude', start=-1.0, value=1.0) [2] IntSlider(end=100, name='n', start=5, value=200) [1] Row [0] Matplotlib(Figure, name='interactive00114') Launching server at http://localhost:40405 Nun könnt ihr ``http://localhost:40405`` in eurem Browser öffnen und die App auszuprobieren: .. figure:: pyodide-example.png :alt: Pyodide-Beispiel Ihr könnt nun die Datei :download:`pyodide/deploy.html` in eure Github-Seiten :abbr:`o.ä. (oder ähnliches)` einfügen – es ist kein separater Server erforderlich. .. seealso:: * `Awesome Panel/Webassembly Apps `_ Optionen -------- Im Folgenden erläutere ich einige der Optionen von ``panel convert``. ``--to`` Das Format, in das konvertiert werden soll. Es gibt drei Optionen, die jeweils unterschiedliche Vor- und Nachteile haben: ``pyodide`` (Standard) Die Anwendung wird mit Pyodide im Haupt-Thread ausgeführt. Diese Option ist weniger performant als ``pyodide-worker``, erzeugt aber eine völlig eigenständige HTML-Datei, die nicht auf einem statischen Dateiserver, wie :abbr:`z.B. (zum Beispiel)` Github Pages, gehostet werden müssen. ``pyodide-worker`` erzeugt HTML- und JS-Dateien, die jedoch einen Web-Worker enthält, der in einem separaten Thread läuft. Dies ist die leistungsfähigste Option, aber die Dateien müssen auf einem statischen Dateiserver gehostet werden. ``pyscript`` erzeugt eine HTML-Datei, die `PyScript `_ nutzt. Dies erzeugt eigenständige HTML-Dateien mit ````- und ````-Tags, die die Abhängigkeiten und den Anwendungscode enthalten. Diese Ausgabe ist am lesbarsten und sollte die gleiche Leistung wie die Option ``pyodide`` haben. ``-out`` Das Verzeichnis, in das die Dateien geschrieben werden sollen. ``--pwa`` Fügt Dateien hinzu, die die Anwendung zu einer Progressive Web-Apps machen. `Progressive Webanwendungen (PWAs) `_ bieten eine Möglichkeit für eure Webanwendungen, sich fast wie eine native Anwendung zu verhalten, sowohl auf mobilen Geräten als auch auf dem Desktop. ``panel convert`` hat eine ``--pwa``-Option, die die notwendigen Dateien generiert, um eure Panel- und Pyodide-Anwendung in eine PWA zu verwandeln. ``--skip-embed`` Überspringt das Einbetten von vorgerenderten Inhalten in der konvertierten Datei. Panel bettet vorgerenderte Inhalte in die HTML-Seite ein und ersetzt diese durch Live-Komponenten, sobald die Seite geladen ist. Dies kann jedoch sehr lange dauern. Wenn ihr dieses Verhalten deaktivieren und zunächst eine leere Seite rendern möchtet, verwendet die Option ``--skip-embed``. ``--index`` erstellt einen Index wenn ihr mehrere Anwendungen auf einmal konvertiert, damit ihr leicht zwischen den Anwendungen navigieren könnt. ``--requirements`` Explizite Anforderungen, die der konvertierten Datei oder einer ``requirements.txt``-Datei hinzugefügt werden sollen. Standardmäßig werden die Anforderungen aus dem Code abgeleitet. Wenn eine Bibliothek einen optionalen Import verwendet, der nicht aus der Liste der Importe eurer Anwendung abgeleitet werden kann, müsst ihr eine explizite Liste der Abhängigkeiten angeben. .. note:: panel und seine Abhängigkeiten, einschließlich NumPy und Bokeh, werden automatisch geladen, :abbr:`d.h. (das heißt)` die expliziten Anforderungen für die obige Anwendung würden wie folgt aussehen: .. code-block:: console $ uv run panel convert deploy.ipynb --out pyodide --requirements pandas matplotlib Alternativ könnt ihr auch eine ``requirements.txt``-Datei bereitstellen: .. code-block:: console $ uv run panel convert deploy.ipynb --out pyodide --requirements requirements.txt ``--watch`` Beobachten der Quelldateien. Eine vollständige Übersicht erhaltet ihr mit ``panel convert -u``. .. tip:: Wenn die konvertierte Anwendung nicht wie erwartet funktioniert, könnt ihr die Fehler meist in der Browser-Konsole finden, :abbr:`s.a. (siehe auch)` `Finding Your Browser's Developer Console `_. .. seealso:: Antworten auf die am häufigsten gestellten Fragen zu Python im Browser findet ihr in den * `Pyodide FAQ `_ * `PyScript FAQ `_