iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >用 WebAssembly 在浏览器中运行 Python
  • 739
分享到

用 WebAssembly 在浏览器中运行 Python

浏览器代码Python 2023-05-14 20:05:16 739人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

长期以来,python 社区一直在讨论如何使 Python 成为网页浏览器中流行的编程语言。然而网络浏览器实际上只支持一种编程语言:javascript。随着网络技术的发展,我们已经把越来越多的程序应用在网络上,如游戏、数据科学可视化以及音

用 WebAssembly 在浏览器中运行 Python

长期以来,python 社区一直在讨论如何使 Python 成为网页浏览器中流行的编程语言。然而网络浏览器实际上只支持一种编程语言:javascript。随着网络技术的发展,我们已经把越来越多的程序应用在网络上,如游戏、数据科学可视化以及音频和视频编辑软件。这意味着我们已经把繁重的计算带到了网络上——这并不是JavaScript的设计初衷。所有这些挑战提出了对新编程语言的需求,这种语言可以提供快速、可移植、紧凑和安全的代码执行。因此,主要的浏览器供应商致力于实现这个想法,并在2017年向世界推出了WEBAssembly。

在本教程中,我们将看一下WebAssembly如何帮助你在浏览器中运行Python代码。

要明确的是,JavaScript本身就是一种强大的编程语言。它只是不适合某些操作。关于这一点,请看JavaScript的创始人Brendan Eich的《从ASM.js到WebAssembly》一文。

我们正在建立什么

假设你想教一门Python课程。为了使你的课程更加有趣和好玩,在每一节课之后,你想为你的学生安排一个练习,这样他们就可以练习他们所学到的知识。

这里的问题是,学生需要通过安装特定版本的Python来准备一个开发环境,创建并激活一个虚拟环境,并安装所有必要的包。这可能会耗费大量的时间和精力。由于每台机器都是不同的,所以也很难对此提供确切的指导。

虽然你可以创建一个后端,在Docker容器或AWS Lambda函数中运行提交的代码,但你选择保持简单堆栈,在课程内容中添加一个Python编辑器,可以在客户端、在网络浏览器中运行Python代码,并向用户展示结果。这正是你在本教程中要构建的东西。

用 WebAssembly 在浏览器中运行 Python

WebAssembly

根据Mozilla开发者网络(MDN)文档的定义,WebAssembly(WASM)的定义如下:

WebAssembly是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。它设计的目的不是为了手写代码而是为诸如C、c++和Rust等低级源语言提供一个高效的编译目标。

因此,WASM让我们在浏览器中运行用不同语言(不仅仅是JavaScript)编写的代码,有以下好处:

  • 它是快速、高效和可移植的。
  • 它是安全的,因为代码是在一个安全的沙盒执行环境中运行的。
  • 它可以在客户端运行。

因此,在我们上面的例子中,如果用户在我们的服务器上运行代码,我们不需要担心,如果成千上万的学生尝试练习代码,我们也不需要担心,因为代码的执行发生在客户端,在Web浏览器上。

WebAssembly的设计并不是为了杀死JavaScript。它是对JavaScript的补充。当JavaScript不是合适的工具时,它可以被使用,如游戏、图像识别和图像/视频编辑等。

请看 WebAssembly.org的使用案例,了解更多你可能想利用WebAssembly的情况。

Pyodide

本教程使用Pyodide库来运行Python代码,它将CPython解释器编译为WebAssembly,并在浏览器的JavaScript环境中运行。它带有一些预装的Python软件包。你也可以使用Micropip来使用更多的软件包。

Hello World

用下面的代码创建一个新的html文件。





在你的浏览器中打开该文件。然后,在你的浏览器的开发者工具控制台中,你应该做如下事情:

Loading distutils
Loading distutils from Https://cdn.jsdelivr.net/pyodide/v0.20.0/full/distutils.js
Loaded distutils
Python initialization complete
Hello, world from the browser!

你可以看到,最后一行是Python代码在浏览器中执行的结果。

让我们快速看一下上面的代码。

  • 首先,你可以使用CDN或直接从GitHub发布的版本下载并安装Pyodide。
  • loadPyodide 加载并初始化 Pyodide wasm 模块。
  • pyodide.runPython将Python代码作为一个字符串,并返回代码的结果。

Pyodide的优势

在前面的例子中,你看到了安装Pyodide并开始使用它是多么容易。你只需要从CDN导入 pyodide.js并通过 loadPyodide初始化它。之后,你可以使用 pyodide.runPython("你的Python代码")在浏览器中运行你的 Python 代码。

当你第一次下载Pyodide时,下载量很大,因为你要下载完整的CPython解释器,但你的浏览器会缓存它,你不需要再次下载它。

在Pyodide上还有一个庞大而活跃的社区。其官方网址如下:

​​https://www.PHP.cn/link/3Dcf44c3136a27a28b3bb27586fd5fc5​​

可以看一下其中的Pyodide 路线图、gitHub上的公开问题、Gitter社区。

Pyodide的局限性

第一次加载Pyodide,需要四到五秒(取决于你的连接速度),因为你必须下载约10MB左右的文件。另外,Pyodide代码的运行速度比本地Python慢3到5倍。

其他选择

一般来说,如果你想在浏览器中运行Python,你有两种方法可用。

1、使用转译器将Python转换为JavaScript。Brython、Transcrypt 和 Skulpt 都使用这种方法。

2、转换Python运行环境以在浏览器中使用。Pyodide 和 PyPy.js 使用这种方法。

方案一和方案二的一个主要区别是,方案一中提到的库不支持Python包。也就是说,它们的下载量比方案二中的库要小得多,因此,它们的速度也更快。

在这个教程中,我们选择了Pyodide,因为它的语法更简单,而且支持Python包。如果你对其他选项感兴趣,请随时查看它们的文档。

Python代码编辑器

在本节中,我们将创建一个简单的Python编辑器,可以在浏览器中运行代码。

1、Pyodide

2、CodeMirror

3、flask

创建一个新的项目

$ mkdir python_editor_wasm
$ cd python_editor_wasm

创建并激活一个虚拟环境。

$ python3.10 -m venv env
$ source env/bin/activate
(env)$

安装Flask:

(env)$ pip install Flask

在项目的根部创建一个名为app.py的文件并添加以下代码。

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)

在我们项目的根部创建一个 "templates "文件夹,并在其下添加index.html文件。

templates/index.html:




















Run Python in your browser

在 index.html文件的头部,我们导入了用于格式化的Tailwind CSS,Pyodide.js 0.20.0,以及CodeMirror及其依赖包。

UI有三个重要的组成部分:

1、Editor。用户可以在这里写Python代码。它是一个文本区域的HTML元素,其ID为代码。当我们初始化codemirror时,我们让它知道我们想用这个元素作为一个代码编辑器。

2、Output。显示代码输出的地方。它是一个id为output的textarea元素。当Pyodide执行Python代码时,它将把结果输出到这个元素。我们也在这个元素中显示一个错误信息。

3、Run button。当用户点击这个按钮时,我们抓取编辑器元素的值并将其作为一个字符串传递给 pyodide.runPython。当 pyodide.runPython返回结果时,我们在输出元素中显示它。

现在在项目的根部,创建 static/js文件夹。然后,在 js文件夹下,创建一个名为 main.js的新文件。

static/js/main.js:

我们完成了以下步骤:

// find the output element
const output = document.getElementById("output");
// initialize codemirror and pass configuration to support Python and the dracula theme
const editor = CodeMirror.fromTextArea(
document.getElementById("code"), {
mode: {
name: "python",
version: 3,
singleLineStringErrors: false,
},
theme: "dracula",
lineNumbers: true,
indentUnit: 4,
matchBrackets: true,
}
);
// set the initial value of the editor
editor.setValue("print('Hello world')");
output.value = "Initializing...n";
// add pyodide returned value to the output
function addToOutput(stdout) {
output.value += ">>> " + "n" + stdout + "n";
}
// clean the output section
function clearHistory() {
output.value = "";
}
// init pyodide and show sys.version when it's loaded successfully
async function main() {
let pyodide = await loadPyodide({
indexURL: "https://cdn.jsdelivr.net/pyodide/v0.20.0/full/",
});
output.value = pyodide.runPython(`
import sys
sys.version
`);
output.value += "n" + "Python Ready !" + "n";
return pyodide;
}
// run the main function
let pyodideReadyPromise = main();
// pass the editor value to the pyodide.runPython function and show the result in the output section
async function evaluatePython() {
let pyodide = await pyodideReadyPromise;
try {
pyodide.runPython(`
import io
sys.stdout = io.StringIO()
`);
let result = pyodide.runPython(editor.getValue());
let stdout = pyodide.runPython("sys.stdout.getvalue()");
addToOutput(stdout);
} catch (err) {
addToOutput(err);
}
}

1、初始化CodeMirror,支持Python和Dracula主题。

2、初始化Pyodide。

3、添加了一个名为 evaluatePython的函数,当用户点击运行按钮时执行。它将代码元素的值传递给 pyodide.runPython,并通过 addToOutput 在输出元素中显示结果。

4、增加了一个叫 clearHistory的函数,当用户点击 ClearHistory按钮时,它将清除输出元素。

要在本地运行Flask开发服务器,请运行:

(env)$ flask run

现在服务器应该在5000端口运行。在你的浏览器中导航到 http://127.0.0.1:5000,测试一下代码编辑器。

总结

在本教程中,主要讲解了如何使用WebAssembly在浏览器中运行Python代码,但一般来说,WebAssembly涵盖了更广泛的使用情况。

我们的部署平台比以往任何时候都更加多样化。WebAssembly可以影响客户端web开发、服务器端开发、游戏、教育、云计算、移动平台、loT、serverless等方面。

以上就是用 WebAssembly 在浏览器中运行 Python的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 用 WebAssembly 在浏览器中运行 Python

本文链接: https://www.lsjlt.com/news/205340.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 用 WebAssembly 在浏览器中运行 Python
    长期以来,Python 社区一直在讨论如何使 Python 成为网页浏览器中流行的编程语言。然而网络浏览器实际上只支持一种编程语言:JavaScript。随着网络技术的发展,我们已经把越来越多的程序应用在网络上,如游戏、数据科学可视化以及音...
    99+
    2023-05-14
    浏览器 代码 Python
  • javascript只能在浏览器中运行
    JavaScript是一种高级编程语言,常用于Web开发中。它是一种脚本语言,可以在网页中添加动态功能或特效,例如通过移动鼠标改变图像大小,或者可以向表单添加交互式验证等等。因此,人们常常误以为JavaScript只能在浏览器中运行。然而,...
    99+
    2023-05-14
  • javascript在浏览器运行的方法
    小编给大家分享一下javascript在浏览器运行的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript在浏览器运行的方法:首先打开需要调试的网...
    99+
    2023-06-14
  • 浏览器中如何运行Node.js
    这篇文章给大家分享的是有关浏览器中如何运行Node.js的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一切要从收到一封邮件开始大早上,我收到一封邮件,StackBlitz说正在与Next.js和Google的团队...
    99+
    2023-06-15
  • php文件如何在浏览器运行
    这篇文章主要介绍了php文件如何在浏览器运行,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二...
    99+
    2023-06-14
  • vue文件如何在浏览器运行
    这篇文章主要介绍vue文件如何在浏览器运行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! vue文件在浏览器运行的方法:1、打开cmd命令窗口,使用cd命...
    99+
    2024-04-02
  • css代码怎么在浏览器运行
    css 代码在浏览器中运行需要五个步骤:1. 创建样式表文件;2. 在 html 中链接样式表文件;3. 编写 css 代码;4. 浏览器解析 css 代码;5. 网页按预期渲染。 C...
    99+
    2024-04-06
    css
  • 浏览器怎么运行javascript
    这篇文章给大家分享的是有关浏览器怎么运行javascript的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。浏览器运行javascript的方法:首先打开一个网页;然后直接在网页上面右键,点击【检查】进入控制台;接...
    99+
    2023-06-15
  • 网络浏览器中运行Python脚本PyScript剖析
    目录正文使用PyScript编程标准库导入使用来自PyPI的库本地导入REPL 标签与 JavaScript 事件监听器互动正文 PyScript可以让你在浏览器中直接运行Pytho...
    99+
    2024-04-02
  • vue为什么可以在浏览器运行
    Vue 是一种现代化的前端 JavaScript 框架,它可以在浏览器中快速渲染页面。Vue 的优越性能主要表现在以下几个方面:Vue 的虚拟 DOMVue 采用了虚拟 DOM 的方式,即将真实 DOM 抽象成虚拟 DOM,然后和数据进行比...
    99+
    2023-05-14
  • 如何在HTML5的浏览器上运行WebGL程序
    本篇内容主要讲解“如何在HTML5的浏览器上运行WebGL程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在HTML5的浏览器上运行WebGL程序”吧!&...
    99+
    2024-04-02
  • 深度剖析 Vue3 在浏览器的运行原理
    目录前言首次渲染patch 函数processComponent 方法setupComponentsetupRenderEffect前言 上一讲深度解析 Vue3 ...
    99+
    2024-04-02
  • Windows怎么配置Apache以便在浏览器中运行Python script的CGI模式
    这篇文章给大家介绍Windows怎么配置Apache以便在浏览器中运行Python script的CGI模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。现在因为已经安装了2.6的Python,以及支持2.6的Eric...
    99+
    2023-06-05
  • vue可以在浏览器运行的原因是什么
    本文小编为大家详细介绍“vue可以在浏览器运行的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue可以在浏览器运行的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Vue 是一种现代化的前端...
    99+
    2023-07-05
  • 浏览器运行环境是怎样的
    这篇文章主要讲解了“浏览器运行环境是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“浏览器运行环境是怎样的”吧!国际五大浏览器品牌:按照全球使用率降序排...
    99+
    2024-04-02
  • 怎么使用命令行浏览器在Linux终端上网浏览
    这篇文章给大家分享的是有关怎么使用命令行浏览器在Linux终端上网浏览的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux 用户的最佳终端 Web 浏览器注:此榜单排名不分先后。1、W3Mw3m 是...
    99+
    2023-06-15
  • 如何在Nodejs或者浏览器直接运行esm代码
    今天就跟大家聊聊有关如何在Nodejs或者浏览器直接运行esm代码,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 怎么在...
    99+
    2024-04-02
  • python中如何利用selenium进行浏览器爬虫
    这篇文章给大家介绍python中如何利用selenium进行浏览器爬虫,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。相信大家刚开始在做爬虫的时候,是不是requests和sound这两个库来使用,这样确实有助于我们学习...
    99+
    2023-06-02
  • 如何让HTML5和CSS3网站在微软的浏览器中也能运行
    这篇文章给大家介绍如何让HTML5和CSS3网站在微软的浏览器中也能运行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 起初,IE其实也是一款非常有进取心...
    99+
    2024-04-02
  • PHP 函数可以在浏览器中执行吗?
    否,php 函数通常不能在浏览器中执行,因为它是一种服务器端脚本语言。然而,可以通过 ajax、php 预编译器或 webassembly(wasm)在浏览器中运行 php 函数。使用 ...
    99+
    2024-04-17
    php 浏览器执行 c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作