Wie kann ich Python und JavaScript integrieren?

Lesezeit: 5 Minuten

Benutzeravatar von Jacob Gabrielson
Jakob Gabrielson

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

    – 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

Benutzeravatar von Stephen Simmons
Stephen Simmons

Wie wäre es mit pyjs?

Von der oben genannten Website:

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)?

    – Anderson Green

    9. Februar 2013 um 5:10 Uhr

  • Beachten Sie, dass pyjs Python 3.0+ nicht unterstützt github.com/pyjs/pyjs/issues/831

    – AXO

    13. November 2015 um 15:02 Uhr

  • pyjs wird nicht mehr gepflegt (das letzte Commit war am 22. September 2015).

    – Frank Dernoncourt

    6. Januar 2021 um 6:55 Uhr

Hier ist etwas, ein Python-Wrapper um den SeaMonkey-Javascript-Interpreter … http://pypi.python.org/pypi/python-spidermonkey

  • Dies scheint dem, wonach ich gesucht habe, am nächsten zu kommen; Danke.

    – Jakob Gabrielson

    28. März 2009 um 22:51 Uhr

Benutzeravatar von Tobias Kienzler
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

Benutzeravatar von iman
iman

PyExecJS kann PyV8, Node, JavaScriptCore, SpiderMonkey, JScript verwenden.

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

  • 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

Benutzeravatar von Extreme
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.

Greifen Sie von Python aus auf JS zu:

from javascript import require, globalThis

chalk, fs = require("chalk"), require("fs")

print("Hello", chalk.red("world!"), "it's", globalThis.Date().toLocaleString())
fs.writeFileSync("HelloWorld.txt", "hi!")

1441960cookie-checkWie kann ich Python und JavaScript integrieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy