集成Python和JavaScript的最佳方法?


68

是否可以集成Python和JavaScript?例如,假设您希望能够在JavaScript中定义类并从Python使用它们(反之亦然)。如果是这样,最好的方法是什么?我不仅对这是否可行还感兴趣,而且是否有人在“严肃的”项目或产品中做到了

我想举个例子,可以使用JythonRhino,但我很好奇是否有人真正做到了这一点,以及是否有针对其他平台的解决方案(尤其是CPython)。


1
也许您可以使用Emscripten将CPython编译为JavaScript,然后在浏览器中运行CPython。可以从JavaScript调用Python函数,反之亦然。syntensity.com/static/python.html
安德森·格林

1
@AndersonGreen这是已经完成:pypyjs - github.com/rfk/pypyjs
denfromufa

对于它的价值,这个SO回答提供了一种在JS和Python之间共享对象的统一方法,并在此回购中实现,该回购仅包装了通过webpack捆绑的NodeJS模块并将其公开为Python模块。
Jthorpe

Answers:



27

pyjs怎么

从以上网站:

pyjs是用于Web和桌面的Rich Internet Application(RIA)开发平台。使用pyjs,您可以完全使用Python编写基于JavaScript的Web应用程序。


1
@AppleGrew是否可以在浏览器中完全运行睡衣(没有任何服务器端组件)?
安德森·格林

4
请注意,pyjs不支持Python 3.0+ github.com/pyjs/pyjs/issues/831
AXO

pyjs不再维护(上一次提交是在2015年9月22日)。
Franck Dernoncourt

16

这个问题并不完全年轻,但是有一些替代方案:

  • Skulpt完全在浏览器中的Python实现。”
  • Brython- “用于客户端Web编程的Python 3实现”
  • RapydScript- “类似Python的JavaScript,无需额外的开销或怪癖”
  • Transcrypt - “精益和平均的Python 3.6到JavaScript编译器与多重继承,sourcemaps,静态类型检查和选择性的操作符重载。” (也在Github上

5
只需加上我的两分钱,Skulpt和Brython都是玩具,而不是成熟的编译器/语言。RapydScript和Transcrypt将在性能方面围绕它们运行。实际上,JS中缺少高性能的Python解释器是RapydScript最初被发明的原因。就像TypeScript一样,RapydScript现在具有类型安全性的附加好处。免责声明:我是RapydScript的维护者。
亚历山大·谢普科夫

@AlexanderTsepkov我没有时间去测试那些,所以感谢您的补充:)
Tobias Kienzler

1
Transcrypt可以点安装,如果您不希望自己沉浸在js生态系统中,那就太好了。但是到目前为止,RapydScript似乎是最快的编译选项。这里描述一系列不错的选项。还有似乎没有维护的Jiphy
杰伊

10

有两个项目允许python对象和javascript对象之间的“明显”转换,从int或float到Number以及从str或unicode到String的“明显”转换:PyV8,并且正如一位作者已经提到的那样:python-spidermonkey

pyv8实际上有两种实现-最初的实验是由sebastien louisel进行的,第二种(正在积极开发中)是由flier liu进行的。

我对这些项目的兴趣一直是将它们与睡衣联系在一起,一个Python到JavaScript编译器,创建一个JIT的Python的加速器。

所以那里有很多-这取决于您想做什么。


1
不幸的是,与本文答案中提出的几乎所有其他想法相比,pyv8仍然保持良好状态。
Matthias Urlichs 2014年

6

如果您只想在javascript和python之间共享复杂的数据类型,请查看jsonpickle。它包装了标准的Python JSON库,但是在序列化和反序列化Python类和其他数据类型方面有一些技巧。

不少Google App Engine项目都使用了该库。 JooseFirePython两个一体化jsonpickle。


请注意,jsonpickle使用非标准的“ py / ref”引用类型,这使得非Python客户端更难使用。当前无法关闭它。 code.google.com/p/jsonpickle/issues/detail?id=9
pimlottc

4

PyExecJS能够使用PyV8,Node,JavaScriptCore,SpiderMonkey和JScript中的每一个。

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


2

您可能还想签出PyPy项目-他们有一个Python编译器,包括Python到Javascript,C和llvm。这使您可以用Python编写代码,然后根据需要将其编译为Javascript。

http://codespeak.net/pypy

另外,请查看内容丰富的博客:

http://morepypy.blogspot.com/

不幸的是,您不能以这种方式将Javascript转换为Python。总体看来,它确实运行良好,他们曾经在线上有一个Bub'n'Bros游戏的Javascript版本(由编译的Python制成)(尽管服务器已经关闭了一段时间)。

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



1

一段时间以前,我在与Pyjon玩耍,似乎可以直接用Python编写Java评估程序并运行简单的程序...尽管它不是JS的完整实现,而只是一个实验。在这里获取:

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


1

上面提到的许多项目已经死亡或垂死,缺乏作者的积极性和兴趣。有趣的是该领域的发展。

作为记录,在基于插件的实现时代,KDE营地试图通过插件和非语言特定的方式解决此问题,并创建了Kross https://en.wikipedia.org/wiki/Kross_(software) -在我理解它即使在社区内部也从未成功。

在这个“鸡与蛋”问题期间,基于javascript的实现无疑是必经之路。也许将来我们会在浏览器中看到纯净的,完整的Python支持。


1

您还可以XPCOMXULFirefox,Thunderbird或Komodo之类的基于应用程序中使用,例如。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.