Webentwicklungs-Werkzeuge

7 Tools, die Python zu JavaScript konvertieren

27.03.2023
Von 
Serdar Yegulalp schreibt für unsere US-Schwesterpublikation Infoworld.
Sie stehen auf Python, aber nicht besonders auf JavaScript? Diese Tools bringen Sie – und Ihre Webanwendungen – weiter.
Diese Tools portieren Python in die JavaScript-Welt.
Diese Tools portieren Python in die JavaScript-Welt.
Foto: Kateryna Reka - shutterstock.com

Die Diskussion darüber, ob Python oder JavaScript ganz allgemein die besseren Zukunftsaussichten hat, tobt weiter. Indes gibt es keinen Redebedarf, wenn es um die Vorherrschaft am Web-Frontend geht. Solange WebAssembly es nicht ermöglicht, Programmiersprachen transparent für die Verwendung im Browser zu kompilieren, führt hier kein Weg an JavaScript vorbei. Das gehört zu den Top-Zielsprachen für Transpiler, die eine Programmiersprache in eine andere umwandeln. Python ist mit seiner riesigen und wachsenden Community und seiner Bibliotheken-Fülle wiederum ein optimaler Kandidat, um in JavaScript konvertiert - respektive transpiliert - zu werden.

Im Folgenden haben wir sieben aktuelle Tools zusammengestellt, die Python für die JavaScript-Welt nützlich machen.

Brython

Ein zentrales WebAssembly-Versprechen (das noch in weiter Ferne ist), besteht darin, jede beliebige Sprache für die Webentwicklung nutzen zu können. Geht es nach der Philosophie hinter Brython, lautet das Motto: "Warum warten?".

Das Tool implementiert eine Version von Python 3 für die client-seitige Webwentwicklung. Das funktioniert über eine JavaScript-Bibliothek, die alle Keywords und die meisten Funktionen von Python 3 emuliert. In Python geschriebene Skripte können so direkt in eine Webseite eingebunden werden. Um mit dem Document Object Model (DOM) und dem Browser zu interagieren (und alle anderen Tasks zu erledigen, die normalerweise direkt in JavaScript abgearbeitet werden), bietet Brython ein High-Level Python-Modul-Interface (das browser-Package).

Zahlreiche Live-Code-Beispiele und eine Galerie mit Mini-Applikationen veranschaulichen, wie das Ganze funktioniert. Sie können das Tool sogar dazu verwenden, um native Android-Apps in Python zu coden. Eine async-Funktionalität ist auch verfügbar, allerdings müssen Sie das async-Modul von Brython anstelle des asyncio-Moduls von Python verwenden.

Brython entgeht allerdings ebenfalls nicht den Einschränkungen, die JavaScript im Browser auferlegt werden: Zum Beispiel gibt es keinen Support für lokale Dateisysteme. Immerhin wird aber HTML5 Local Storage unterstützt, was nützlich ist, wenn Sie nur irgendeine Möglichkeit suchen, Daten auf Einzelanwendungs-Basis vorzuhalten.

JavaScripthon

Im Gegensatz zu Brython ist JavaScripthon kein Tool, dass auf vollständigen In-Browser-Support ausgelegt ist. Es konzentriert sich ausschließlich darauf, Python-Code (ab Version 3.5 und neuer) in JavaScript zu übersetzen. Dabei emittiert JavaScripthon ES6-Code, um den Bedarf an Polyfills auf Browser-Seite zu minimieren und arbeitet - dank der Beibehaltung von Source Maps - gut mit Tools wie Webpack zusammen.

JavaScripthon unterstützt die meisten gängigen Python-Keywords, darunter async und await, Python 3.6 f-strings sowie Class Methods und Inheritances. Und wenn Sie einmal direkt auf JavaScript zurückgreifen müssen, können Sie es über einen speziellen Function Call inline einfügen.

Nicht unwichtig: Der letzte Beitrag zum JavaScripthon-Projekt stammt aus dem Juli 2022 - obwohl das Tool um Support für Python 3.10 aktualisiert wurde.

Jiphy

Das Akronym Jiphy steht für "JavaScript in, Python out". Dieses Tool konvertiert in beide Richtungen zwischen den beiden Programmiersprachen. Es ist sogar möglich einen Mix aus JavaScript und Python in eine der beiden Sprachen zu konvertieren.

Bevor Sie jetzt das komplette OpenStack in JavaScript übersetzen: Bei Jiphy geht es nicht um eine vollständige Konvertierung der Codebasis. Vielmehr besteht seine Funktion laut zugehörigem README-Text darin, "die Kontextwechsel zu reduzieren, die Python-Developer benötigen, um JavaScript-Code zu schreiben und umgekehrt."

Der größte Minuspunkt bei Jiphy: Es unterstützt lediglich eine Teilmenge der Python-Funktionen. Darunter etwa Decorators und Exceptions, aber weder Classes noch Default Arguments. Das liegt im Wesentlichen daran, dass Jipy eine "line-to-line"-Beziehungs zwischen Quell- und Zielcode anstrebt. Deswegen gibt es für die Abbildung der Python-Standardbibliothek auf JavaScript-Konstruktionen ebenfalls keinen Support.

Das Jiphy-Projekt wurde bereits seit Mitte 2020 nicht mehr aktualisiert. Sie sollten das Tool als rein experimentell betrachten, bis die Arbeit daran wieder aufgenommen wird.

Js2Py

Wie bereits der Name nahelegt, handelt es sich bei Js2Py um eine reine Python-Konvertierungs-Engine - die derzeit lediglich ES5-Code offiziell unterstützt (für mutige gibt es experimentellen ES6-Support).

Js2Py unterstützt eine Vielzahl von Interoperationen zwischen Python und JavaScript. Sie können zum Beispiel mit einer js2py.require-Methode bestehende Node.js-Module in Ihren Python-Code importieren. Variablen von JavaScript-Seite können auf der Python-Seite ausgewertet werden - Python-Objekte auch in JavaScript-Code verwendet werden.

Js2Py stellt auch eine (ebenfalls experimentelle) Virtual Machine zur Verfügung, um JavaScript-Code aus Python heraus zu evaluieren. Diese wird allerdings nicht für den produktiven Einsatz empfohlen.

RapydScript

Die Macher von RapydScript versprechen, JavaScript-Anwendungen "in einer Sprache zu schreiben, die Python viel näher kommt - ohne den Overhead, den andere, vergleichbare Frameworks mit sich bringen". Das Projekt ähnelt CoffeeScript insofern, als es Code aufnimmt, der in einer alternativen Sprache geschrieben wurde - in diesem Fall eine Variante von Python - und JavaScript generiert, das überall unverändert ausgeführt werden kann.

So bietet RapydScript das Beste aus beiden Welten und kombiniert die saubere Syntax von Python mit JavaScript-Features wie Anonymous Functions, DOM-Manipulation und der Möglichkeit, JavaScript-Bibliotheken wie jQuery oder Node.js zu nutzen.

Eine weitere praktische Funktion von RapydScrypt: Es bietet (wenn möglich) sowohl Python- als auch JavaScript-Nomenklaturen für Operationen. So funktioniert beispielsweise das von jQuery verwendete $-Symbol auch in RapydScript - und Arrays können sowohl die .push- (JavaScript) als auch die .append-Methode (Python) unterstützen. Allerdings wurde das Projekt schon seit Mai 2021 nicht mehr aktualisiert - und sollte daher als experimentell betrachtet werden.

PyScript

Python direkt im Browser auszuführen, ist die wesentliche Funktion von PyScript. Das Tool verwende dazu in Teilen die gleiche Technologie wie Brython: Pyodide - eine auf WebAssembly portierte Python-Laufzeitumgebung, die den Browser zu einer Umgebung für Python als Web-Skriptsprache optimiert.

Dabei ermöglicht PyScript eine wechselseitige Kommunikation zwischen der JavaScript- und der Python-Umgebung. So können Python-Skripte beispielsweise mit dem DOM arbeiten, JavaScript-Code aufrufen und mit den zurückgegebenen Ergebnissen arbeiten. Python-Anwendungen können jedoch auch den Browser als Output Device verwenden. Der Python-Befehl print() lässt sich nutzen, um Outputs direkt in eine Webseite zu schreiben.

PyScript bietet auch Möglichkeiten, um mit Paketen zu arbeiten, die über den PyPI Package Index zur Verfügung stehen. Diesbezüglich funktioniert noch nicht alles, wie es soll: Zum Beispiel arbeitet PyScript noch nicht mit der requests-Bibliothek oder anderen Python-Tools für HTTP-Requests zusammen. Immerhin unterstützt das Tool aber die fetch-Methode von JavaScript, um diese Tasks zu erfüllen.

Transcrypt

Wenn Sie beim Namen Transcrypt an TypeScript denken, liegen Sie gar nicht so verkehrt. Denn Transcrypt folgt demselben Grundgedanken - es transpiliert Python zu JavaScript. Dabei behält das Tool wo immer möglich die Struktur und Idiome des ursprünglichen Python-Codes bei - einschließlich Konstrukten wie Lambads und multiplen, Class-übergreifenden Inheritances.

Darüber hinaus lassen sich für den transpilierten Code auch Source Maps erzeugen, die auf das ursprüngliche Python zurückverweisen. Das ermöglicht Entwicklern, diesen Code (anstelle des generierten JavaScript) zu Debugging-Zwecken zu verwenden. Seiner Dokumentation zufolge erfüllt Transcrypt diese Tasks mit dem CPython-Modul Abstract Syntax Tree, das einen programmatischen Zugriff auf die Art und Weise ermöglicht, wie Python seinen eigenen Code parst.

Einer der größten Benefits von Transcrypt ist der automatische Zugriff auf das Document Object Model. Wenn Sie beispielsweise versuchen, auf document.getElementById in Python zuzugreifen, wird der konvertierte Code document.getElementById in JavaScript verwendet. Developer, die Frameworks für DOM-Manipulation verwenden möchten, stehen online Schritt-für-Schritt-Tutorials zur Verfügung, um JavaScript-Applikationen mit Transcrypt, React und Material-UI-Bibliotheken zu schreiben.

Ein zugehöriges Projekt, das noch stark unter Verschluss gehalten wird, ist Numscrypt. Das portiert die Mathematik- und Statistikbibliothek NumPy auf JavaScript. Bisher bietet Numscrypt nur eine Teilmenge der Funktionen von NumPy, wenn auch die, die am häufigsten verwendet werden. Allerdings wurde auch Numscrypt schon seit 2021 nicht mehr aktualisiert. (fm)

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.