2009-03-25 10 views
54

Est-il possible d'intégrer Python et JavaScript? Par exemple, imaginez que vous vouliez pouvoir définir des classes en JavaScript et les utiliser depuis Python (ou vice versa). Si oui, quelle est la meilleure façon? Je suis intéressé non seulement si cela est possible, mais si quelqu'un l'a fait dans un "sérieux" projet ou produit.La meilleure façon d'intégrer Python et JavaScript?

Je suppose que ce serait possible en utilisant Jython et Rhino, par exemple, mais je suis curieux de savoir si oui ou non quelqu'un ait jamais réellement fait cela, et s'il existe des solutions pour d'autres plates-formes (en particulier CPython).

+1

Peut-être pourriez-vous compiler CPython en JavaScript en utilisant Emscripten, puis lancer CPython dans le navigateur. Il pourrait être possible d'appeler des fonctions Python à partir de JavaScript, et vice versa. http://syntensity.com/static/python.html –

+1

@AndersonGreen cela a été déjà fait: pypyjs - https://github.com/rfk/pypyjs – denfromufa

+0

Pour ce que ça vaut, [cette réponse SO] (https: // stackoverflow.com/a/28652754/1519199) présente une approche unifiée de partage d'objets entre JS et Python, et est implémenté dans [ce repo] (https://github.com/jdthorpe/ajvpy) qui enveloppe tout simplement un module NodeJS fourni via webpack et l'expose comme un module Python. – Jthorpe

Répondre

24

Que diriez-vous pyjs?

Depuis le site Web ci-dessus:

pyjs est une application Internet riche (RIA) Plate-forme de développement pour les utilisateurs Web et de bureau. Avec pyjs, vous pouvez écrire vos applications web sous JavaScript en Python.

+9

Pyjamas est maintenant Pyjs. Link - http://pyjs.org/ – AppleGrew

+1

@AppleGrew Est-il possible d'exécuter des pyjamas entièrement dans le navigateur (sans aucun composant côté serveur)? –

+1

Notez que pyjs ne prend pas en charge Python 3.0+ https://github.com/pyjs/pyjs/issues/831 – AXO

6

Si vous êtes simplement intéressé par le partage de types de données complexes entre javascript et python, consultez jsonpickle. Il encapsule les bibliothèques Python JSON standard, mais possède quelques astuces dans la sérialisation et la désérialisation des classes Python et d'autres types de données.

Un grand nombre de projets Google App Engine ont utilisé cette bibliothèque. Joose et FirePython tous deux incorporent jsonpickle.

+0

Notez que jsonpickle utilise un type de référence non standard « py/ref » qui le rend plus difficile à utiliser pour non clients python. Il n'y a actuellement aucun moyen de l'éteindre. http://code.google.com/p/jsonpickle/issues/detail?id=9 – pimlottc

2

Vous pouvez également consulter le projet PyPy - ils ont un compilateur Python to (n'importe quoi), y compris Python à Javascript, C et llvm. Cela vous permet d'écrire votre code en Python et de le compiler en Javascript comme vous le désirez.

http://codespeak.net/pypy

Vous pouvez également consulter le blog informatif:

http://morepypy.blogspot.com/

Malheureusement, vous ne pouvez pas convertir Javascript pour Python cette façon. Cela semble fonctionner très bien dans l'ensemble, ils avaient l'habitude d'avoir une version Javascript (faite à partir de Python compilé) du jeu Bub'n'Bros en ligne (bien que le serveur ait été arrêté depuis un moment).

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

9

il y a deux projets qui permettent une transition « évidente » entre les objets python et javascript objets, avec des traductions « évidentes » de int ou flottent à nombre et str ou unicode à cordes: PyV8 et, comme un écrivain a déjà mentionné: python-spidermonkey.

Il existe en fait deux implémentations de pyv8 - l'expérience originale a été réalisée par Sébastien Louis, et la seconde (en développement actif) est par flier Liu.Mon intérêt pour ces projets a été de les lier à pyjamas, un compilateur python-javascript, pour créer un accélérateur JIT python.

donc il y a beaucoup là-bas - cela dépend de ce que vous voulez faire.

+1

pyv8 est encore bien entretenu, contrairement à presque toutes les autres idées présentées dans les réponses ici, malheureusement. –

1

Une autre possibilité est d'utiliser XPCOM, par exemple dans les applications basées sur XUL (comme Firefox, thunderbird, Komodo, etc.)

1

Je jouais avec Pyjon il y a quelque temps et semble réussi à écrire le eval de Javascript directement en Python et couru programmes simples ... Bien qu'il ne soit pas une implémentation complète de JS et plutôt une expérience. Recevez votre article ici:

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

3

PyExecJS est en mesure d'utiliser chacun des PyV8, Noeud, JavaScriptCore, SpiderMonkey, JScript.

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

fonctionne hors de la boîte sur OSX contrairement à pyv8 –

1

Utilisez Js2Py pour traduire JavaScript à Python, c'est le seul outil disponible :)

+0

Ne supporte pas Python 3.x https://github.com/PiotrDabkowski/Js2Py/issues/6 – AXO

+1

Prend en charge Python 3 maintenant –

10

Cette question est pas exactement jeune, mais il y a des alternatives arriver:

  • "Skulpt est un entièrement dans le navigateur l'implémentation de Python. "
  • Brython - "Un Python 3 mise en œuvre côté client programmation web"
  • RapydScript - "JavaScript Python comme sans les frais généraux ou bizarreries supplémentaires"
  • Transcrypt - « Lean et moyenne Python 3.6 compilateur JavaScript avec plusieurs héritage, sourcemaps, vérification de type statique et surcharge sélective de l'opérateur. " (aussi on Github)
+4

Juste pour ajouter mes deux cents, à la fois Skulpt et Brython sont des jouets plutôt que des compilateurs/langues complets.RapydScript et Transcrypt exécuteront des cercles autour de leur performance. En fait, l'absence d'interpréteur Python performant dans JS était la raison pour laquelle RapydScript a été inventé pour commencer. RapydScript a maintenant un avantage supplémentaire de sécurité de type, tout comme TypeScript. Disclaimer: Je suis le mainteneur RapydScript. –

+0

@AlexanderTsepkov Je n'ai pas eu le temps de les tester, donc merci pour vos ajouts :) –

+1

Transcrypt peut être pip-installé, sympa si vous ne souhaitez pas vous immerger dans l'écosystème js. RapydScript semble cependant être l'option transpilée la plus rapide pour autant que je l'ai rassemblée jusqu'ici. Une belle gamme d'options est décrite [ici] (https://github.com/zoofIO/flexx/wiki/PyScript-vs-X). Il y a aussi [Jiphy] (https://github.com/timothycrosley/jiphy) qui semble non maintenu. – Jay

Questions connexes