集成 Python 和 JavaScript 的最佳方式?

IT技术 javascript python brython transcrypt rapydscript
2021-02-26 04:30:23

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

例如,我猜想使用JythonRhino是可能的,但我很好奇是否有人真的这样做过,以及是否有其他平台(尤其是CPython)的解决方案

6个回答

pyjs怎么

从上面的网站:

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

pyjs 不再维护(最后一次提交是在 2015 年 9 月 22 日)。
2021-04-16 04:30:23
@AppleGrew 是否可以完全在浏览器中运行睡衣(没有任何服务器端组件)?
2021-04-27 04:30:23
注意 pyjs 不支持 Python 3.0+ github.com/pyjs/pyjs/issues/831
2021-05-01 04:30:23

这是一些东西,一个围绕 SeaMonkey Javascript 解释器的 Python 包装器...... http://pypi.python.org/pypi/python-spidermonkey

这似乎是最接近我正在寻找的东西;谢谢。
2021-05-08 04:30:23

这个问题并不是很年轻,但已经提出了一些替代方案:

  • Skulpt完全在浏览器中实现的 Python。”
  • Brython - “客户端 Web 编程的 Python 3 实现”
  • RapydScript - “没有额外开销或怪癖的类似 Python 的 JavaScript”
  • Transcrypt - “精益和平均 Python 3.6 到具有多重继承、源映射、静态类型检查和选择性运算符重载的 JavaScript 编译器。” (也在Github 上
@AlexanderTsepkov 我没有时间测试这些,所以感谢您的补充:)
2021-04-21 04:30:23
Transcrypt 可以通过 pip 安装,如果你不想让自己沉浸在 js 生态系统中,那就太好了。然而,就我目前收集到的而言,RapydScript 似乎是最快的转译选项。这里描述一系列不错的选项还有似乎没有维护的Jiphy
2021-04-22 04:30:23
再加上我的两分钱,Skulpt 和 Brython 都是玩具,而不是成熟的编译器/语言。RapydScript 和 Transcrypt 将在性能方面围绕它们运行。事实上,JS 中缺乏高性能的 Python 解释器是 RapydScript 被发明的原因。RapydScript 现在有一个额外的类型安全优势,就像 TypeScript 一样。免责声明:我是 RapydScript 的维护者。
2021-05-08 04:30:23

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

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

我对这些项目的兴趣一直是将它们链接到pajamas,一个 python 到 javascript 的编译器,以创建一个 JIT python 加速器。

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

不幸的是,pyv8 仍然维护得很好,与这里的答案中提出的几乎所有其他想法形成鲜明对比。
2021-05-12 04:30:23

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

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

请注意,jsonpickle 使用非标准的“py/ref”引用类型,这使得它更难用于非 Python 客户端。目前没有办法关闭它。 code.google.com/p/jsonpickle/issues/detail?id=9
2021-04-27 04:30:23