鱼C论坛

 找回密码
 立即注册
查看: 11146|回复: 66

[技术交流] 【初体验】PyScript 让浏览器直接运行 Python

[复制链接]
发表于 2022-5-9 22:53:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2022-5-10 21:31 编辑

在线演示:




                               
登录/注册后可看大图


学过小甲鱼老师 Web 和 Python 课程的童鞋有福气了~

Anaconda 的开发商近日发布了可在浏览器端运行的 Python —— PyScript

2022-05-08_15-11-53.jpg
(官网 >> 传送门

PyScript 是一个开发框架,为开发者提供了在标准 HTML 中嵌入编写 Python 代码的能力、使用 Python 调用 JavaScript 函数库,以及创建 Python Web 应用。

PyScript 旨在提供“一等公民(first-class)”的编程语言,它具有一致的风格化规则、更具表现力且更易于学习。

废话不多说了,我们通过一下几部分带鱼油们快速上手~

  • 1、安装
  • 2、Demo
    • 2.1 打印Hello World
    • 2.2 加载python文件
    • 2.3 与HTML交互
    • 2.4 配置Python开发环境
    • 2.5 REPL
  • 3、原理
  • 4、源码包


1、安装

PyScript 就 2 种使用方式:本地和在线。

本地就是将用到的脚本下载到本地,然后手动引入到项目中。

就像这样:
<script defer src="js/pyscript.js"></script>
在线就是将在本地引入的脚本,变成在线引入,就像这样:
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
在线的好处就是不用管版本问题,官方提供的链接肯定是最新版。

以防有的鱼油无法访问上面的链接,我们接下来的演示都用本地的。


2、DEMO

PyScript 使用以下三个主要元素在 html 中编写 Python:

  • py-env 定义了运行 Python 代码所需的包
  • py-script 是在网页中编写 Python 代码的地方
  • py-repl 创建一个 REPL(读取-评估-打印循环)组件,用于评估用户输入的代码并显示结果

我们依次来用下。

2.1 打印Hello World

我们先创建一个最基础的网页结构 index.html:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>鱼C-PyScript演示</title>
</head>

<body>

</body>

</html>
看不懂代码的童鞋,去看小甲鱼老师的 Web 教程(传送门)。

接下来在 head 元素中引入:
<head>
    ...
    <link rel="stylesheet" href="css/pyscript.css" />
    <script defer src="js/pyscript.js"></script>
</head>
注意, 一定要指定 script 元素的 defer 属性,这样浏览器会继续解析、渲染画面,而不会因为需要载入 script 元素内的资源而卡住。
然后在 body 元素中键入:
<body>
    <py-script>print("Hello World,Hello FishC")</py-script>
</body>
看结果:

2022-05-09_21-52-24.jpg

这就完成在浏览器中运行 Python 代码啦~

是不是很容易~

加载完指定脚本后,只需将 Python 代码写到 py-script 元素中就可以。

2.2 加载 Python 脚本

接下来我们在和 index.html 同级地方创建一个 Python 文件 fishc.py。

接下来只需要在 py-script 元素中通过 src 属性引入即可:
<py-script src="fishc.py"></py-script>
在 fishc.py 中我们先写入一个打印:
print("Hello FishC")
运行看结果:

2022-05-09_21-57-47.jpg

这就是加载 Python 脚本的方式,很丝滑有木有~

如果你看不懂 Python 的代码的话,去看小甲鱼老师的完结版 Python 教程哦(传送门)。

2.3 与 HTML 交互

引入完 Python 脚本,我们就可以来搞事情了。

例如我们通过 Python 获取当前日期,然后写入到网页中。

先在网页中创建一个id 为 date 的 p 元素用来接收数据:
<p id="date"></p>
接着在 fishc.py 中添加脚本:
import datetime as dt
pyscript.write('date', dt.datetime.today())
运行看结果:

2022-05-09_22-05-10.jpg

没问题哈~

格式有点生硬,我们按照星期,月,日,年的顺序显示:
import datetime as dt
pyscript.write('date', dt.datetime.today().strftime('%A %B %d,%Y'))
结果:

2022-05-09_22-08-03.jpg

这就舒服多了。

所有在 python 脚本写的代码都可以写到 py-script 元素中。

如果需要像另一个元素中写入数据,就在脚本再写一个 pyscript.write() 就好。

2.4 配置Python开发环境

例如我们通过 matplotlib 中的子库以及 numpy 库快速创建个散点图,修改 python 脚本:
import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(1000)
y = np.random.randn(1000)
fig, ax = plt.subplots()
ax.scatter(x, y)
fig
运行:

2022-05-09_22-41-15.jpg

报错了,核心思想就是 PyScript 中没有 matplotlib 库。

我们需要手动配置下,在 head 元素中添加 py-env 元素,然后通过 - 名称 来运行所需要的包。

,修改 py-env:
<py-env>
        - matplotlib
    </py-env>
运行看结果:

2022-05-09_22-28-35.jpg

除了加载库以外还可以通过设置 paths 来加载其他 python 文件:
- paths
   - 文件路径
因为可以直接在python脚本中实现,有点鸡肋,就不做演示了。

2.5 REPL

用过 Anaconda 的鱼油对 REPL 应该不陌生,它是 Read-Eval-Print Loop 的首字母缩写。

表示一种简单的,交互式的编程环境,也就是命令行的模式。

直接在小方框中输入代码,按 shift+enter 就会出结果。

启用方式也很简单,直接在 body 中创建 py-replt 元素,auto-generate 属性设置为 true:
<py-repl auto-generate="true"></py-repl>
运行:

2022-05-09_22-49-19.jpg

enter 换行,shift+enter 运行结果。


3、原理

PyScript 基于 Pyodide 构建,Pyodide 由编译成 WebAssembly 的 CPython 3.8 解释器组成。

允许在网页浏览器中运行 Python。

Pyodide 可以安装来自 PyPi 的任何 Python 包。

它还包括一个外部函数接口,可以将 Python 包暴露给 JavaScript,并将浏览器 UI,包括 DOM,暴露给 Python。

更多原理大家可以自己去看官方文档:

2022-05-08_20-41-46.jpg
官网 >> 传送门


4、源码包

展示代码: PyScript-Demo.zip (582.3 KB, 下载次数: 92, 售价: 7 鱼币)

以防有鱼油没法用 Github,准备了完整源码包:

游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-10 08:51:50 | 显示全部楼层
PyScript好好玩
是不是意味着我不用学js了???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 09:00:45 From FishC Mobile | 显示全部楼层
估计它也无法替代ajax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-10 09:09:28 | 显示全部楼层
雷欧库珀 发表于 2022-5-10 08:51
PyScript好好玩
是不是意味着我不用学js了???

看需求场景
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 10:51:37 | 显示全部楼层
雷欧库珀 发表于 2022-5-10 08:51
PyScript好好玩
是不是意味着我不用学js了???

学js更多的还是为了操作DOM
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 10:52:54 | 显示全部楼层
13 个请求
已传输 11.9 MB
22.7 MB 项资源
完成用时:3.52 秒
DOMContentLoaded:66 毫秒
加载时间:504 毫秒
---------------
打印个Hello 这也太离谱了哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 12:42:38 | 显示全部楼层
King丨小义 发表于 2022-5-10 10:51
学js更多的还是为了操作DOM

像我这种业余玩家应该够用了,后续它会不会支持操作呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 22:40:03 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 22:59:43 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 00:03:40 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 14:46:16 | 显示全部楼层
pyscript里是不是不能用 time.sleep()

我间隔5s地输出当地时间,显示结果一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 16:13:12 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 19:48:08 From FishC Mobile | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 20:05:07 From FishC Mobile | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 08:30:59 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 18:56:07 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-12 20:34:45 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 18:48:38 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-13 18:49:15 | 显示全部楼层
windows能用吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 11:33:10 | 显示全部楼层
PyScript好好玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 07:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表