你有没有遇到过这种尴尬:好不容易用Python写了个数据分析脚本,想分享给别人用,结果对方一看命令行就懵了?
折腾HTML、CSS、JavaScript吧,学起来没个把月下不来;用Flask、Django那些框架吧,又要搞路由、模板、请求响应,杀鸡用牛刀。我就想要个能跑在浏览器里的交互界面,能不能简单得像print和input一样?

一个让你忘记前端的库
PyWebIO这个库,你基本上可以把它理解为“把浏览器当成富文本终端来用”。你不需要写一行HTML或JS,甚至不用管什么GET、POST。就是用你最熟悉的input()和print()那样的写法,直接在网页上搞出输入框、按钮、表格、图表。
来看个最直观的例子。下面这是一段计算BMI的代码:
from pywebio.inputimportinput, FLOAT
from pywebio.output import put_text
defbmi():
height = input("你的身高(cm):", type=FLOAT)
weight = input("你的体重(kg):", type=FLOAT)
bmi = weight / (height / 100) ** 2
put_text(f"你的BMI是{bmi:.1f}")
注意啊,这里用的input()和put_text()不是Python自带的,是PyWebIO提供的。但你执行这个函数之后,它会自动弹出一个本地网页,页面上就有输入框让用户填身高体重,然后显示结果。整个过程,你完全没碰前端的东西。
它跟传统Web开发有啥不一样?
我简单列个对比你就明白了:
| | |
| | |
| | |
| | |
| | |
| | start_server(函数, port=80) |
用PyWebIO,你的程序逻辑还是原来的样子,只是把print换成put_text,把input换成PyWebIO的input。原来跑在命令行的脚本,改几行代码就变成Web应用了。

不止是简单输入输出
你别以为它只能做这种小玩具。PyWebIO支持表格、文件上传下载、进度条、按钮布局、复选框、下拉菜单,甚至能跟matplotlib、plotly、pyecharts这些库配合展示动态图表。做个小型的内部管理系统、数据看板、模型演示平台,完全够用。
而且它不是个玩具库——它能无缝集成到Flask、Django、Tornado、FastAPI这些框架里。你想在已有的Django项目里加一个数据上传分析的页面?加一行路由配置指向PyWebIO写的函数就完事了。
我之前给团队做爬虫工具,原本是命令行跑各种参数,队友每次都要问我参数格式。后来花了十分钟改成PyWebIO版本,加了个文件上传和几个输入框、一个进度条,大家点开网页自己传参数、点按钮,世界清静了。十几行代码,省掉了无数次口舌。
上手成本几乎为零
安装就一行:
pip install pywebio
然后你把你原本脚本里的输入输出改一改,用start_server(your_func, port=8080)启动,浏览器打开http://localhost:8080就能交互。
对了,它还支持异步,跟asyncio配合很丝滑。你要是想临时给别人分享一个演示,甚至可以直接用它的在线Playground(官方提供一个在线编辑运行的环境)写代码生成链接发过去。
一点小吐槽
当然也不是没槽点。复杂的页面布局还是有点别扭,毕竟它是命令式不是声明式的。另外同时开太多会话会有点内存开销。但话说回来——它本来就是给你快速搞个小工具用的,不是让你去做电商网站。
适合谁?
试试呗,反正装一下也不亏。我现在手头但凡遇到需要给非技术同事用的小工具,第一反应已经不是写命令行或者搭Flask了——直接PyWebIO,十分钟搞定。
项目地址:https://github.com/pywebio/PyWebIO