语雀原文地址: py-scripts初体验
参考资料PyScript: Python in the Browser 官网
pyscript 独立官网
py-scripts官方github仓库
简介py-scripts是anaconda团队开发的浏览器中的python运行环境, 基于Pyodide(一个将CPython编译成WebAssembly的项目).
如何使用 hello-wrold- 引入依赖:
- 在
标签中写代码
print('Hello, World!')
计算圆周率
print("计算圆周率:")
def wallis(n):
pi = 2
for i in range(1,n):
pi *= 4 * i ** 2 / (4 * i ** 2 - 1)
return pi
pi = wallis(10000000)
s = f"圆周率接近: {pi:.10f}"
print(s)
结合d3.js画图
d3: JavaScript & PyScript visualizations side-by-side
Based on Learn D3: Shapes tutorial.
JavaScript version
PyScript version
from pyodide import create_proxy, to_js
import d3
fruits = [
dict(name="", count=21),
dict(name="", count=13),
dict(name="", count=8),
dict(name="", count=5),
dict(name="", count=3),
dict(name="", count=2),
dict(name="", count=1),
dict(name="", count=1),
]
fn = create_proxy(lambda d, *_: d["count"])
data = d3.pie().value(fn)(to_js(fruits))
arc = (d3.arc()
.innerRadius(210)
.outerRadius(310)
.padRadius(300)
.padAngle(2 / 300)
.cornerRadius(8))
py = d3.select("#py")
py.select(".loading").remove()
svg = (py
.append("svg")
.attr("viewBox", "-320 -320 640 640")
.attr("width", "400")
.attr("height", "400"))
for d in data:
d_py = d.to_py()
(svg.append("path")
.style("fill", "steelblue")
.attr("d", arc(d)))
text = (svg.append("text")
.style("fill", "white")
.attr("transform", f"translate({arc.centroid(d).join(',')})")
.attr("text-anchor", "middle"))
(text.append("tspan")
.style("font-size", "24")
.attr("x", "0")
.text(d_py["data"]["name"]))
(text.append("tspan")
.style("font-size", "18")
.attr("x", "0")
.attr("dy", "1.3em")
.text(d_py["value"]))
结论
- 非常有趣
- 非常早期, 官网连hello-world教程都没有
- wasm数据过大, 加载了几分钟还没加载出来, 毕竟是要把整个编译器加载到浏览器中, 而且这个wasm没有放到国内的cdn上.(所以近期的玩法, 最大的可能是将这些文件放到本地…)
- 未来给pythoner带来更多可能, 结合jupter-notebook可以带来很多炫酷的玩法.



