Python 开发人员在实现在浏览器中运行 Python 代码的目标上取得了进展。
Python 可能是世界上最流行的编程语言,但与其他领先的 JavaScript 不同,您不能在浏览器中运行 Python 代码。
在 PyCon 2022 上,其"Pythonistas"社区的年度会议------以及由于大流行而自 2019 年以来 Python 贡献者的首次面对面会议------开发人员重新审视了在浏览器中运行 Python 代码的想法。
在浏览器中,Python 不支持编译到 WebAssembly (Wasm) 运行时,这是一种广泛支持的 IC3 Web 应用程序标准,它将用 Rust、C、C++ 和 Go 编写的代码编译成二进制格式,这允许 Web 应用程序执行更多操作就像浏览器之外的桌面应用程序。
但在 PyCon 2022 上,CPython 开发人员 Christian Heimes 和其他贡献者 Ethan Smith 详细介绍了他们如何使 CPython 主分支能够编译为WebAssembly。CPython 是 Core Python 的缩写,是派生其他 Python 发行版的参考实现。
CPython 现在使用Emscripten交叉编译为 Wasm, Emscripten是一个工具链,可以将用 C 或 C++ 编写的项目编译为 Node.js 或 Wasm 运行时。
Python 软件基金会在一篇博文中强调了这项工作: "Python 可以在许多平台上运行:Linux、Windows、Apple Macs、微型计算机,甚至是 Android 设备。但众所周知的事实是,如果你想在其中运行代码作为浏览器,Python 根本就不好------你只需要转向 JavaScript,"它指出。"然而,现在这种情况可能即将改变。"
虽然基金会指出,由于 Python 标准库中缺少模块,交叉编译到 WebAssembly 仍然是"高度实验性的",但 PyCon 2022 显示出社区对使 Python 成为更好的浏览器语言的兴趣日益浓厚。
Python 社区中的一些人想知道 Python 是否已经在数据科学方面走得太远,可能会破坏其作为通用编程语言的实用性。除了浏览器之外,Python 的另一个弱点是在移动设备上运行,或者实际上任何应用程序------甚至在桌面上------都需要图形用户界面。
但即使在数据科学领域,也有让 Python 对浏览器更友好的愿望。流行的 Anaconda Python 数据科学发行版的制造商 Anaconda 的联合创始人兼首席执行官 Peter Wang 此前告诉 ZDNet,"使用 Python 构建和分发任何具有实际图形用户界面的应用程序是非常尴尬的"。
Wang 的公司展示了他们一直在开发的一种新工具,用于将用于数据科学的 Python 引入浏览器。
Wang在 PyCon 2022 上宣布了 PyScript,将其描述为"在 HTML(如 PHP)中交错 Python 的系统"。它允许开发人员在 HTML 中编写和运行 Python 代码,并在 PyScript 中调用 Javascript 库。该系统允许网站完全用 Python 编写。
PyScript 建立在Pyodide、CPython 的一个端口或用于浏览器的 Python 发行版和基于 WebAssembly 和 Emscripten 的 Node.js 之上。
Pyodide 是 Python 的一个有趣的开发。它是现已废弃的 Mozilla Iodide 项目的一部分 ,由Michael Droettboom于 2018 年创建。截至 2021 年,Piodide 作为一个独立的开源项目继续存在。它面向数据科学用户,可以使用 Numpy、Pandas 和 Matplotlib 等关键 Python 数据科学库在浏览器中完成统计和可视化建模工作。
"Pyodide 使得使用micropip在浏览器中安装和运行 Python 包成为可能。支持任何在 PyPI 上可用的带有轮子的纯 Python 包,"Pyodide 项目声明。本质上,它使用 Emscripten 将 Python 代码和科学库编译为 WebAssembly。
Pyodide 项目一个月前发布了 0.20 版本。它已更新到 Python 的最新主要版本 Python 3.10,并在 Firefox 和 Chrome 中带来了速度改进。
Python 软件基金会指出:"PyScript 目前建立在 Pyodide 之上,这是一个将 Python 引入浏览器的第三方项目,在 Heimes 开始在 CPython 主分支上工作之前就开始了这项工作。随着 Heimes 对 Python 3.11 的修改,这努力只会变得更容易。"
在 PyCon 2021 上,Python 的创建者 Guido van Rossum 承认 Python 非常适合后端 Web 开发,但将前端让给了 JavaScript。当 Python 可以将其优势集中在数据科学上时,为什么要在其他语言服务良好的领域过度使用 Python?
"我不介意这么多不同的语言必须有不同的目标。我的意思是,没有人会问 Rust 什么时候可以在浏览器中编写 Rust;至少这对于 Rust 来说似乎也不是一个有用的目标。Python 应该专注于它擅长的应用领域,以及作为后端的 Web 和科学 数据处理,"van Rossum 当时说。