数据结构论坛

首页 » 分类 » 问答 » Pyodide在浏览器端实现Python
TUhjnbcbe - 2024/4/28 16:41:00

现在越来越多的软件都Web化,浏览器化。虽然科学计算是一计算密集型的方向,对性能要求和实时性较高。但是数据计算方面也一直在做着这样的探索和发展。

Jypyernotbook项目让科学计算真正实现了Web化,而JS语言的发展和WebAssembly技术的兴起,让科学计算的浏览器化,在客户端实现数据计算处理和可视化变成了可能。今天虫虫要给大家介绍就是一款来自Mozilla的实验项目Pyodide,一款用于在浏览器中运行完整Python科学计算处理工具栈环境的软件。

概述

Pyodide项目源于Mozilla的项目Iodide。Iodide是基于Web技术的数据科学实验和通信工具。它旨在在浏览器中进行数据计算。问题是通用的浏览器语言JS,没有成熟的数据科学处理库,也缺乏一些数值计算很有用功能和数据结构,比如运算符重载等。虽然完善JS语言本身是一条路,但是这条路太慢,所以有必要投机取巧的走一条捷径出来。这就是Pyodide项目的所做的事情:通过将成熟活跃的Python科学计算工具栈引入浏览器来满足数据科学计算的需要。Pyodide提供了一个完整的标准Python解释器,它完全在浏览器中运行,可以完全访问浏览器的WebAPI。下面以一个快速实例开始:

代码显示效果如下:

了解更多关于Pyodide可以做的事情的最好方法就是去尝试吧!有一个演示笔记本(50MB下载),介绍了高级功能。本文的其余部分将更深入地探讨其工作原理。

技术架构

类似项目分析

Pydodie设计时候参考了很多现有项目,在实现Python到浏览器这最后一公里问题上,市面上已经有很多的项目,但是目前还没有一个项目可以做到Python科学计算栈的转化,该栈包括不限于Python类库:NumPy,Pandas,Scipy以及Matplotlib。

Transcrypt项目可以实现Python到JS的转换。由于转换步骤本身发生在Python中,所以你需要提前完成所有的转换,或通过与服务器通信来完成这项工作。这并不能实现用户在浏览器中编写Python并实现即写急用的目标。

Brython和Skulpt项目实现了将标准Python解释器重写为JS,可以直接在浏览器中运行Python代码。但是它们都是对Python的全新实现,并且通过JS中引导,所以他们无法兼容C编写的Python扩展,比如NumPy和Pandas。因此,无法引入数据科学工具。

PyPyJs项目是使用emscripten和JS对PyPy的浏览器实现。就像PyPy一样它可以快速地运行Python代码。同样它也有于PyPy同样的C扩展性能问题。

上面这很多项目都无法解决Python科学计算的问题,这促成了Pydodie的出现:构建一个尽可能基于Python的标准并能兼容实现大多数数据科学家已经使用的Python科学堆栈的工具库的软件。

Pydodie项目技术架构的关键技术就是新兴的emscripten和WebAssembly。使用他们实现将C语言编写的现有代码库移植到浏览器运行。Pyodide使用Python化的emscripten类库cpython-emscripten为基础。

Emscripten和WebAssembly

关于emscripten互联网上有大量的介绍,在此不在赘述,在Pyodide项目中它的作用是:

实现从C/C++到WebAssembly的编译器。

实现兼容性层,使浏览器变为一个本机计算环境。

WebAssembly是一种在现代Web浏览器中运行的新语言,是对JS脚本的补充。它以接近本机的性能运行在浏览器上,旨在作为C和C++等低级语言的编译目标。

关于WebAssembly虫虫之前的文章中有介绍过,

1
查看完整版本: Pyodide在浏览器端实现Python