pyodide:浏览器的python

2021-05-13 13:04:00

LWN订阅者已为您提供以下订阅内容。成千上万的订阅者依赖LWN了解Linux和自由软件社区的最佳新闻。如果您喜欢本文,请考虑订阅LWN。感谢您访问lwn.net!

浏览器中的Python长期以来一直是众多在韦特圣农村社区的愿望清单的项目。但是,在这一点上,JavaScript在嵌入到Web及其浏览器中的TheLanguage巩固了其角色。 Pyodide项目通过将现有的CPyThonInterpreter编译到浏览器中的二进制文件和#39; s javascript环境中的二进制文件,在浏览器中播放在浏览器中运行Python。 Pyodidecame关于Mozilla' S IodideProject的一部分,这已经被路边落下,但Pyodide现在被淘汰为社区驱动的项目。

碘化物,介绍2019年,是一个努力为科学勘探和智能化创建一个浏览器笔记本,类似于Jupyter Andjupyterlab。在该介绍帖子中,注意到JavaScript和科学计算之间的不匹配被告知 - 大多数现有的生态系统都是基于Python的 - 哪个Pyodide的想法来自:当我们开始考虑为科学家们更好地思考,我们是我们的方式可以更好地使用JavaScript,将现有的科学图书馆更好地向网上使用,并将其包裹不宜,以便使用JS API。当我们向Mozilla的Webassembly向导提出这一点时,他们提供了更雄心勃勃的想法:如果很多科学家偏好,那么通过编译Webassembly中的Python Science Stack Torun来迎接他们的位置。

得到那个工作似乎是一个大项目,但它只有两周的时间为迈克·迪罗特·莫斯特·莫司队在碘翅托书中运行。在接下来的几个月内,他和他人增加了对最受欢迎的毕业基础包(其中许多在CPythonInterpreter中实施的许多),例如Numpy,Matplotlib,Pandas,Scipy和Scikit-Learn。有关Pyodide的表现,表现出来,表现出来不是使用案例:在JavaScript虚拟机内运行Python解释器增加了AperFormance惩罚,但是这种惩罚结果表明,我们的基准令人惊讶的是,我们的基准令人惊讶的是,我们的基准令人惊讶的是,我们的基准令人惊讶的是,我们的基准令人惊讶的是,我们的基准令人惊讶的是,我们的基准令人惊讶的是,我们的基准令人惊讶的是,我们的基准令人惊讶的是,在我们的基准中,大约1x-比Firefox和1x-16xslower上的12倍慢于Chrome上。经验表明,这对于交互式解释来说是非常可用的。

在碘化物引入后一个月,Drootboom发布了关于Pyodide的细节。它是使用EMScripten建立的,它提供了一种播种C和C ++的方式,以及"兼容性层,使浏览器感觉像本机计算环境"。这一层是Python这样的工具所必需的:如果你要把这个webassembly拿走并在浏览器中加载它,事情看起来与python解释器相比而不是他们直接在你的操作系统顶部运行。例如,WebBrowsers没有文件系统(一个加载和savefiles的地方)。幸运的是,Emscripten提供了一个虚拟文件系统,写入injavascript,即Python解释器可以使用。默认情况下,这些虚拟“文件”驻留在浏览器选项卡中的易失性内存中,并且在远离页面导航时,它们会消失。 (Emscripten还提供了一种方法,以便在浏览器的持久本地存储中存储事物的文件系统,但Pyodide不会使用它。)通过模拟文件系统和标准计算环境的其他功能,EMScripten使现有项目将现有项目移动到Web BrowsPossible令人惊讶地很少发生变化。

为了在浏览器环境中进行有用的工作,程序对浏览器的Document ObjectModel(DOM)的访问权限,由JavaScript Apisavailable提供。这意味着Python和JavaScript代码需要以各种方式正常工作。大多数基本类型(例如,数字,阵列,字符串)可以相对方便语言,但Python将对象和DICT类型视为不同的,而JavaScript将它们混在一起的范围:所有对象都可以视为DICTS。为了处理那个语言和Python中的语言和Dict类型的对象类型由其他语言中的代理表示;这允许每个语言完全访问另一个和#39; s数据类型。

作为这些代理的示例,帖子会谈论从Python访问domObject,如下所示:文档对象是将jsproxy类型处理到在没有粘性的句子的正确API呼叫中,无需直接介绍:所有这些都会通过查找内容的代理发生文档objectCan正在飞行。 Pyodide不需要包含浏览器具有的Web API的全面列表。

鉴于对大量数据集的焦点经常DUNP等,需要提供一种有效的维数阵列类型,可以在很大程度上在JavaScript和Python之间共享。复制两者之间的巨大阵列将是一个主要的绩效命中,但也可能会超过浏览器的内存量。所以创建了一个存储在堆上的堆栈中的数组类型;描述数组的小型语言特定的DAB是需要复制的ALL。

快两年,斑德取得了很大的进展; Iteleled版本0.17 4月22日。同时,它宣布该项目遭到独立的,与Github存储库完整,从CPython那里借鉴了基于Rust&#39的核准行为。 。同时,碘化物项目已停产,Butpyide在此时的只是碘化物的一部分:" Pyodide吸引了来自社区的兴趣大陆,仍然积极开发,并在Mozilla以外的许多项目中受到了许多项目。"

0.17释放有许多有趣的功能。添加了对Python asynciohas的支持,以便Python Coroutines可以在浏览器EventLoop中运行; JavaScript ProMisecan在Python中等待,反之亦然,并使用Python等待。 ErrorHandling也升级了,以便Python生成的例外可以在JavaScript中迈出;这也可以在另一个方向上完成。

采用了一个新版本的Emscripten,这有助于收缩所需的二进制文件(" Scipy Package Sprank以92 MB至15 MB&#34缩小;)。它还帮助了绩效的侧面。使用最新的Toolchain(包括LLVM后端)结果在运行时间内提高25-30%。总体而言,自2019年宣布以来的表现已经改善了:"根据基准测试,较慢的高达3至5倍之间的性能范围。"

与大多数(全部?)项目一样,Pyodide正在寻找有兴趣以各种方式感兴趣的人。 "有很多方法可以贡献,包括代码贡献,文档改进,添加包,以及使用Pyodide供您的应用程序并提供反馈。"有一个路线图对未来的计划的想法。

作为Mozilla' S Dan Callahan在Apycon 2018 Keynote中说,Python可能被遗留后面,因为人们正在使用的平台正在发生变化。虽然笔记本电脑,桌面和Serverssupport Python只是很好,但很多人只是使用手机和Tablets,其中Python并不真正存在。但是,所有这些设备都有一个uninceplatform(据推测,那条路上的其他人):网络。如果Pythonwants保持相关,它需要一个合理的浏览器故事; Pyodide可以朝向这一点的正确路径。

( 登录后发表评论)