2009-03-25 5 views
54

Ist es möglich, Python und JavaScript zu integrieren? Stellen Sie sich zum Beispiel vor, Sie möchten Klassen in JavaScript definieren und sie in Python verwenden (oder umgekehrt). Wenn ja, wie ist der beste Weg? Ich bin interessiert nicht nur, wenn dies möglich ist, aber wenn jemand es innerhalb eines "seriösen" Projekts oder Produkts getan hat.Beste Möglichkeit, Python und JavaScript zu integrieren?

Ich vermute, es wäre möglich, Jython und Rhino verwenden, für ein Beispiel, aber ich bin neugierig, ob jemand jemals dies tatsächlich geschehen, und wenn es Lösungen für andere Plattformen (insbesondere CPython).

+1

Vielleicht könnten Sie CPython mit Emscripten zu JavaScript kompilieren und dann CPython im Browser ausführen. Es könnte möglich sein, Python-Funktionen von JavaScript aus aufzurufen und umgekehrt. http://syntensity.com/static/python.html –

+1

@AndersonGreen dies wurde bereits getan: pypyjs - https://github.com/rfk/pypyjs – denfromufa

+0

Für was es wert ist, [diese SO Antwort] (https: // stackoverflow.com/a/28652754/1519199) stellt einen einheitlichen Ansatz für die gemeinsame Nutzung von Objekten zwischen JS und Python dar und ist in [this repo] (https://github.com/jdthorpe/ajvpy) implementiert, das ein NodeJS-Modul einfach bündelt via Webpack und stellt es als Python-Modul zur Verfügung. – Jthorpe

Antwort

24

Wie wäre es pyjs?

Von der oben genannten Website:

pyjs ist eine Rich Internet Application (RIA) Entwicklungsplattform sowohl für Web und Desktop aus. Mit pyjs können Sie Ihre JavaScript-basierten Webanwendungen vollständig in Python schreiben.

+9

Pyjamas ist jetzt Pyjs. Link - http://pyjs.org/ – AppleGrew

+1

@AppleGrew Ist es möglich, Pyjamas vollständig im Browser auszuführen (ohne serverseitige Komponenten)? –

+1

Beachten Sie, dass pyjs Python 3.0+ nicht unterstützt https://github.com/pyjs/pyjs/issues/831 – AXO

6

Wenn Sie gerade interessiert sind, komplexe Datentypen zwischen Javascript und Python zu teilen, überprüfen Sie jsonpickle. Es umschließt die Standard-Python-JSON-Bibliotheken, verfügt jedoch über einige intelligente Funktionen zum Serialisieren und Deserialisieren von Python-Klassen und anderen Datentypen.

Etliche Google App Engine-Projekte haben diese Bibliothek verwendet. Joose und FirePython enthalten beide jsonpickle.

+0

Beachten Sie, dass jsonpickle einen nicht standardmäßigen Referenztyp "py/ref" verwendet, der die Verwendung für nicht-standardmäßige Objekte erschwert. Python-Clients. Es gibt derzeit keine Möglichkeit, es auszuschalten. http://code.google.com/p/jsonpickle/issues/detail?id=9 – pimlottc

2

Sie können auch das PyPy-Projekt auschecken - sie haben einen Python-to-Compiler, einschließlich Python zu Javascript, C und Llvm. Auf diese Weise können Sie Ihren Code in Python schreiben und ihn dann nach Belieben in Javascript kompilieren.

http://codespeak.net/pypy

Überprüfen Sie auch den informativen Blog aus:

http://morepypy.blogspot.com/

Leider aber man kann Javascript nicht konvertieren, so Python. Es scheint insgesamt sehr gut zu funktionieren, sie hatten früher eine Javascript (aus kompilierter Python) Version des Bub'n'Bros Spiels online (obwohl der Server für eine Weile nicht erreichbar war).

http://bub-n-bros.sourceforge.net

9

gibt es zwei Projekte, die einen „offensichtlich“ Übergang zwischen Python Objekten und JavaScript-Objekten, mit „offensichtlich“ Übersetzungen aus int oder schweben zu Anzahl und str oder Unicode String erlauben: PyV8 und als eine Schriftsteller hat bereits erwähnt: python-spidermonkey.

es gibt tatsächlich zwei Implementierungen von pyv8 - das ursprüngliche Experiment wurde von sebastien louisel, und das zweite (in aktiver Entwicklung) ist von Flieger liu.

Mein Interesse an diesen Projekten war es, sie mit pyjamas, einem Python-zu-Javascript-Compiler, zu verknüpfen, um einen JIT-Python-Beschleuniger zu erstellen.

so gibt es viele da draußen - es kommt nur darauf an, was Sie tun möchten.

+1

pyv8 ist immer noch gut gepflegt, im Gegensatz zu fast allen anderen Ideen in den Antworten hier leider präsentiert. –

1

eine andere Möglichkeit ist XPCOM zu verwenden, etwa in XUL-basierte Anwendungen (wie Firefox, Thunderbird, Komodo etc.)

1

Ich war mit Pyjon vor einiger Zeit zu spielen und scheint verwalten Javascript ist eval direkt in Python zu schreiben und lief einfache Programme ... Obwohl es keine vollständige Implementierung von JS und eher ein Experiment ist. Erhalten Sie sie hier:

http://code.google.com/p/pyjon/

3

PyExecJS in der Lage, jede von PyV8, Knoten, Javascript, Spider, JScript zu verwenden.

>>> import execjs 
>>> execjs.eval("'red yellow blue'.split(' ')") 
['red', 'yellow', 'blue'] 
>>> execjs.get().name 
'Node.js (V8)' 
+0

funktioniert out of the box auf OSX im Gegensatz zu pyv8 –

1

Verwenden Js2Py JavaScript Python zu übersetzen, dann ist dies das einzige Werkzeug zur Verfügung :)

+0

Unterstützt nicht Python 3.x https://github.com/PiotrDabkowski/Js2Py/issues/6 – AXO

+1

Unterstützt Python 3 jetzt –

10

Diese Frage nicht genau jung ist, aber es gibt einige Alternativen kommen:

  • "Skulpt ist ein vollständig im Browser Implementierung von Python. "
  • Brython - "Eine Python-3-Implementierung für die clientseitige Web-Programmierung"
  • RapydScript - "Python-like JavaScript ohne zusätzlichen Aufwand oder Macken"
  • Transcrypt - „lean and mean Python 3.6 zu JavaScript-Compiler mit mehreren Vererbung, Quellkarten, statische Typüberprüfung und selektives Überladen von Operatoren. " (auch on Github)
+4

Nur um meine zwei Cent, Skulptur und Brython hinzuzufügen sind Spielzeuge und keine vollwertigen Compiler/Sprachen.RapydScript und Transcrypt werden leistungsbezogen Kreise um sie herum ausführen. Tatsächlich war das Fehlen von performantem Python-Interpreter in JS der Grund, warum RapydScript zu Beginn erfunden wurde. RapydScript hat nun einen zusätzlichen Vorteil der Typsicherheit, genau wie TypeScript. Disclaimer: Ich bin der RapydScript-Betreuer. –

+0

@AlexanderTsepkov Ich hatte keine Zeit, diese zu testen, also danke für Ihre Ergänzungen :) –

+1

Transcrypt kann pip-installiert werden, nett, wenn Sie nicht in das js-Ökosystem eintauchen wollen. RapydScript scheint jedoch die schnellste transpilierte Option zu sein, soweit ich das bisher gesehen habe. Ein schönes Array von Optionen ist [hier] beschrieben (https://github.com/zoofIO/flexx/wiki/PyScript-vs-X). Es gibt auch [Jiphy] (https://github.com/timothycrosley/jiphy), das nicht gepflegt zu sein scheint. – Jay