可在浏览器执行Python程序的Pyodide项目脱离Mozilla

Mozilla在发布开源项目Pyodide 0.17版本的同时,也宣布Pyodide现在成为一个独立的项目。Pyodide是一个包含科学堆栈,可以将Python编译成WebAssembly的解释器项目,适合用于想要在网页浏览器中执行Python的使用案例。

Pyodide内置一个可将CPython 3.8编译成WebAssembly的解释器,该解释器可让Python程序在浏览器中执行,而且Pyodide还提供许多常用的Python科学组件,供开发者立刻使用,另外,Pyodide也可以使用PyPi(Python Package Index),并包含了跨语言函数接口,通过该接口能够将Python组件生态系统,开放给Javascript和浏览器接口使用。

而现在Pyodide已经成为一个独立的项目,以单独的GitHub组织来存放,由贡献者团队进行维护,项目的文件则在pyodide.org提供。当初Pyodide是Mozilla的一个内部项目,是为了要在Iodide中使用Python,试图在网页上创建交互式科学运算环境,官方提到,从发布以来,Pyodide就受到广泛社群的注意,项目持续开发中,而且也有许多Mozilla外的项目正在使用。

目前核心团队已经完成透明治理的规则制定,并且也规划好未来发展的路线图,欢迎开发者在新的GitHub存储库中参与贡献。

而Pyodide 0.17的主要更新则有三点,彻底重新设计中央API、类型转换改进以及消调试误与内存泄露问题。官方对类型转换模块进行了大幅度的改善,目的是要让Python和Javascript之间的对象转换,可以产生相同的对象,也就是说,他们希望Python-JS-Python和JS- Python-JS的转换,其开始与结束产生的对象都相同,虽然有一些不可避免的设计折中,因此会有一些例外,但是现在大致上都会相同。

官方解释,Pyodide的一大优势,就是Python和Javascript之间的跨语言函数接口,该接口可以消除使用两个不同语言的麻烦。所有I/O都需要通过一般的网页API,因此要让Python程序代码可以利用浏览器的优势,就需要能够支持像是由Python产生资料,并且由HTML5 Canvas渲染资料,或是在Python中实例事件处理程序这样的案例。

过去Pyodide的痛点在于,当对象在Python和Javascript之间传递一轮之后,回传的对象是不一样的东西,而这并不是用户期望的结果。对象往返转换的问题,是由于Python类型隐式转换到JavaScript造成,官方提到,虽然隐式转换方便使用,但是系统常产生意料之外的结果。为了改进这些问题,官方做了一些调整,在字符串、数字、布尔和None都还是使用隐式转换,而其他的对象则使用代理来帮助转换,使用显式转换方法来将代理转换成为原生类型。