有了 Pyodide ,浏览器运行 Python 顺理成章?

家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

什么是 Pyodide

Pyodide is a Python distribution for the browser and Node.js based on WebAssembly

Pyodide 是 CPython 到 WebAssembly/Emscripten 的端口,本质上 CPython 是解释器和编译器,其在解释 Python 代码之前将其编译为字节码,也是最初的 Python 实现。

micropip :是 Pyodide 和其他使用 Pyodide 项目的轻量级软件包安装程序。

Pyodide 使得使用 micropip 在浏览器中安装和运行 Python 包成为可能,目前支持 PyPi 上提供的任何带有 wheel 的纯 Python 包。 同时,许多带有 C 扩展的软件包也已被移植以与 Pyodide 一起使用。 其中包括许多通用包,例如: regex、PyYAML、lxml 和科学 Python 包,包括: NumPy、pandas、SciPy、Matplotlib 和 scikit-learn。

Pyodide 配备了强大的 Javascript 和 Python 互操作性的外部函数接口,以便开发者可以在代码中自由地混合这两种语言,包括:错误处理、异步 / await 等的全面支持。同时,在浏览器中使用时,Python 可以完全访问 Web API。

目前 Pyodide 在 Github 通过 MPL-2.0 协议开源,有超过 12k 的 star、1k 的 fork、1.5k 的项目使用量,是一个值得关注的前端开源项目。

如何使用 Pyodide

Pyodide 可以在 Web 浏览器或后端 JavaScript 环境中使用。

要在网页中使用 Pyodide,开发者需要加载 pyodide.js 并使用 loadPyodide() 初始化 Pyodide:



  
      
  
  
    
  

由于 Pyodide 依赖于 Webassembly,目前在 Firefox>112、Chrome>112、Safari>16.4 浏览器中经过充分测试,可以立即使用。因此,非常建议在高于当前版本的浏览器中使用。

当然,开发者也可以在 Node.js 中安装 Pyodide npm 包,但至少需要 Pyodide 0.21.0,而且非常建议 Node.js >=18.5.0 版本。

npm install "pyodide@>=0.21.0-alpha.2"

安装依赖后即可通过下面方式运行脚本:

// hello_python.js
const {loadPyodide} = require("pyodide");
async function hello_python() {
  let pyodide = await loadPyodide();
  return pyodide.runPythonAsync("1+1");
}
hello_python().then((result) => {
  console.log("Python says that 1+1 =", result);
});

或者开发者甚至可以使用 REPL,但是要启动支持顶级等待 (top level await) 的 Node.js REPL 需要使用 node --experimental-repl-await:

$ node --experimental-repl-await
Welcome to Node.js v18.5.0.
Type ".help" for more information.
> const {loadPyodide} = require("pyodide");
undefined
> let pyodide = await loadPyodide();
Loading distutils
Loaded distutils
undefined
> await pyodide.runPythonAsync("1+1");
2

更多关于 Pyodide 的内容和用法可以参考文末资料,本文不再过多展开。

参考资料

https://github.com/pyodide/pyodide

https://pyodide.org/en/stable/usage/index.html

https://micropip.pyodide.org/en/stable/

https://www.classcentral.com/

https://www.linkedin.com/

原文链接:,转发请注明来源!