Ist es möglich, Python und JavaScript zu integrieren? Stellen Sie sich zum Beispiel vor, Sie möchten Klassen in JavaScript definieren und sie von Python aus verwenden können (oder umgekehrt). Wenn ja, was ist der beste Weg? Mich interessiert nicht nur, ob dies möglich ist, sondern ob Jeder hat es in einem “ernsthaften” Projekt oder Produkt getan.
Ich vermute, es wäre möglich, zu verwenden Jython Und Nashornzum Beispiel, aber ich bin gespannt, ob das schon einmal jemand gemacht hat und ob es Lösungen für andere Plattformen gibt (insbesondere CPython).
Vielleicht könnten Sie CPython mit Emscripten in JavaScript kompilieren und dann CPython im Browser ausführen. Es ist möglich, Python-Funktionen von JavaScript aus aufzurufen und umgekehrt. syntensity.com/static/python.html
Für das, was es wert ist, stellt diese SO-Antwort einen einheitlichen Ansatz für die gemeinsame Nutzung von Objekten zwischen JS und Python dar und ist in implementiert dieses Repo das einfach ein per Webpack gebündeltes NodeJS-Modul umschließt und als Python-Modul verfügbar macht.
– Jthorpe
30. Juni 2017 um 17:52 Uhr
Für diejenigen, die dies bei Google findensehen Sie sich meine moderne Antwort mit JSPyBridge unten an.
pyjs ist eine Entwicklungsplattform für Rich Internet Application (RIA) für Web und Desktop. Mit pyjs können Sie Ihre JavaScript-gestützten Webanwendungen vollständig in Python schreiben.
@AppleGrew Ist es möglich, Pyjamas vollständig im Browser auszuführen (ohne serverseitige Komponenten)?
Dies scheint dem, wonach ich gesucht habe, am nächsten zu kommen; Danke.
– Jakob Gabrielson
28. März 2009 um 22:51 Uhr
Tobias Kenzler
Diese Frage ist nicht gerade jung, aber es haben sich einige Alternativen ergeben:
“Skulptur ist ein vollständig im Browser Implementierung von Python.”
Britton – “Eine Python 3-Implementierung für die clientseitige Webprogrammierung”
RapydScript – “Python-ähnliches JavaScript ohne zusätzlichen Overhead oder Macken”
Transcrypt – “Lean and mean Python 3.6 to JavaScript Compiler mit multipler Vererbung, Sourcemaps, statischer Typprüfung und selektiver Operatorüberladung.” (Auch auf Github)
Nur um meinen Senf hinzuzufügen, sowohl Skulpt als auch Brython sind eher Spielzeuge als ausgewachsene Compiler/Sprachen. RapydScript und Transcrypt werden leistungsmäßig Kreise um sie herum ziehen. Tatsächlich war das Fehlen eines leistungsfähigen Python-Interpreters in JS der Grund, warum RapydScript überhaupt erfunden wurde. RapydScript hat jetzt einen zusätzlichen Vorteil der Typsicherheit, genau wie TypeScript. Haftungsausschluss: Ich bin der Betreuer von RapydScript.
– Alexander Zepkow
25. September 2016 um 21:17 Uhr
@AlexanderTsepkov Ich hatte keine Zeit, diese zu testen, also danke für deine Ergänzungen 🙂
– Tobias Kienzler
26. September 2016 um 11:19 Uhr
Transcrypt kann per Pip installiert werden, schön, wenn Sie nicht in das js-Ökosystem eintauchen möchten. RapydScript scheint jedoch die am schnellsten transpilierte Option zu sein, soweit ich das bisher mitbekommen habe. Eine schöne Auswahl an Optionen wird beschrieben Hier. Es gibt auch Jiphy was ungepflegt erscheint.
– Jay
23. Juli 2017 um 11:49 Uhr
Es gibt zwei Projekte, die einen “offensichtlichen” Übergang zwischen Python-Objekten und Javascript-Objekten ermöglichen, mit “offensichtlichen” Übersetzungen von int oder float zu Number und str oder unicode zu String: PyV8 und, wie ein Autor bereits erwähnt hat: Python-Spinnenaffe.
Es gibt tatsächlich zwei Implementierungen von pyv8 – das ursprüngliche Experiment stammt von Sebastian Louisel und das zweite (in aktiver Entwicklung befindliche) von Flier Liu.
Mein Interesse an diesen Projekten bestand darin, sie zu verknüpfen Pyjamaein Python-zu-Javascript-Compiler, um einen JIT-Python-Beschleuniger zu erstellen.
Es gibt also eine Menge da draußen – es hängt nur davon ab, was Sie tun möchten.
Wenn Sie nur daran interessiert sind, komplexe Datentypen zwischen Javascript und Python auszutauschen, lesen Sie weiter jsonpickle. Es umschließt die standardmäßigen Python-JSON-Bibliotheken, verfügt jedoch über einige intelligente Funktionen zur Serialisierung und Deserialisierung von Python-Klassen und anderen Datentypen.
Nicht wenige Google App Engine-Projekte haben diese Bibliothek verwendet. Joose Und FeuerPython beide enthalten jsonpickle.
Beachten Sie, dass jsonpickle einen nicht standardmäßigen „py/ref“-Referenztyp verwendet, der die Verwendung für Nicht-Python-Clients erschwert. Es gibt derzeit keine Möglichkeit, es zu deaktivieren. code.google.com/p/jsonpickle/issues/detail?id=9
– pimlotc
19. Oktober 2009 um 16:22 Uhr
iman
PyExecJS kann PyV8, Node, JavaScriptCore, SpiderMonkey, JScript verwenden.
Beachten Sie, dass jsonpickle einen nicht standardmäßigen „py/ref“-Referenztyp verwendet, der die Verwendung für Nicht-Python-Clients erschwert. Es gibt derzeit keine Möglichkeit, es zu deaktivieren. code.google.com/p/jsonpickle/issues/detail?id=9
– pimlotc
19. Oktober 2009 um 16:22 Uhr
Extrem
Viele der Beispiele sind Jahre veraltet und erfordern eine komplexe Einrichtung. Du kannst Geben JSPyBridge einen Versuch (vollständige Offenlegung: Ich bin der Autor).
Es ist eine bidirektionale Bridge, mit der Sie JavaScript-Code von Python aus verwenden können und umgekehrt. Das bedeutet, dass Python-Code JS-Callbacks aufrufen kann und JS-Code Python-Callbacks aufrufen kann.
Greifen Sie mit dem ES6-Importsystem über JS auf Python zu, Beispiel numpy + matplotlib:
import { py, python } from 'pythonia'
const np = await python('numpy')
const plot = await python('matplotlib.pyplot')
// Fixing random state for reproducibility
await np.random.seed(19680801)
const [mu, sigma] = [100, 15]
// Inline expression evaluation for operator overloading
const x = await py`${mu} + ${sigma} * ${np.random.randn(10000)}`
// the histogram of the data
const [n, bins, patches] = await plot.hist$(x, 50, { density: true, facecolor: 'g', alpha: 0.75 })
console.log('Distribution', await n) // Always await for all Python access
await plot.show()
python.exit()
Durch CommonJS (ohne Wartezeit auf oberster Ebene):
const { py, python } = require('pythonia')
async function main() {
const np = await python('numpy')
const plot = await python('matplotlib.pyplot')
...
// the rest of the code
}
main().then(() => python.exit()) // If you don't call this, the process won't quit by itself.
Vielleicht könnten Sie CPython mit Emscripten in JavaScript kompilieren und dann CPython im Browser ausführen. Es ist möglich, Python-Funktionen von JavaScript aus aufzurufen und umgekehrt. syntensity.com/static/python.html
– Anderson Green
9. Februar 2013 um 5:05 Uhr
@AndersonGreen das wurde bereits gemacht: pypyjs – github.com/rfk/pypyjs
– denfromufa
27. Februar 2015 um 16:48 Uhr
Für das, was es wert ist, stellt diese SO-Antwort einen einheitlichen Ansatz für die gemeinsame Nutzung von Objekten zwischen JS und Python dar und ist in implementiert dieses Repo das einfach ein per Webpack gebündeltes NodeJS-Modul umschließt und als Python-Modul verfügbar macht.
– Jthorpe
30. Juni 2017 um 17:52 Uhr
Für diejenigen, die dies bei Google findensehen Sie sich meine moderne Antwort mit JSPyBridge unten an.
– Extrem
23. Juli 2021 um 10:16 Uhr