大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
什么是 PyodidePyodide 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 的项目使用量,是一个值得关注的前端开源项目。
如何使用 PyodidePyodide 可以在 Web 浏览器或后端 JavaScript 环境中使用。
要在网页中使用 Pyodide,开发者需要加载 pyodide.js 并使用 loadPyodide() 初始化 Pyodide:
<!doctype html><html> <head> <script src="https://cdn.jsdelivr.net/pyodide/v0.25.1/full/pyodide.js"></script> </head> <body> <script type="text/javascript"> // 直接编写脚本,然后调用 runPython 方法 async function main(){ let pyodide = await loadPyodide(); console.log(pyodide.runPython("1 + 2")); } main(); </script> </body></html>由于 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.jsconst {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-awaitWelcome to Node.js v18.5.0.Type ".help" for more information.> const {loadPyodide} = require("pyodide");undefined> let pyodide = await loadPyodide();Loading distutilsLoaded distutilsundefined> 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/