PyWebIO 是啥?PyWebIO 把浏览器当成「富文本终端」来用,开发者只需要在 Python 脚本里写几行 input、put_text 之类的函数,就能把交互式网页端的 UI 搞定。最关键的是,你根本不需要懂 HTML、CSS、JS,甚至连前端框架都免了——把原来写在命令行里的脚本,动动手改改输入输出,就能直接跑在浏览器上。
它解决了哪些痛点?
| |
| 前端门槛高 | 零前端 |
| 回调地狱 | 同步阻塞 |
| 部署繁琐 | 一键启动:start_server() 或直接嵌入 Flask/Django |
| UI 布局不灵活 | 即时布局:put_row/put_column 动态组合,像写 Markdown 那样随意 |
| 数据可视化难 | 第三方图表无缝接入:Plotly、Bokeh、pyecharts 直接 put_html() 输出 |
安装 & 开始使用
# 稳定版pip install -U pywebio# 开发版(想抢先体验新特性)pip install -U https://github.com/pywebio/PyWebIO/archive/dev-release.zip
前置条件:Python ≥ 3.5.2(推荐 3.8+,兼容 asyncio)
快速上手示例——算 BMI 的小程序:
from pywebio.inputimportinput, FLOATfrom pywebio.output import put_textdefbmi(): h = input("身高(cm):", type=FLOAT) w = input("体重(kg):", type=FLOAT) bmi_val = w / (h/100)**2 ranges = [ (14.9, '严重偏瘦'), (18.4, '偏瘦'), (22.9, '正常'), (27.5, '超重'), (40.0, '中度肥胖'), (float('inf'), '严重肥胖') ]for limit, label in ranges:if bmi_val <= limit: put_text(f'你的 BMI = {bmi_val:.1f},属于 {label}')breakif __name__ == '__main__':# 直接在浏览器打开from pywebio import start_server start_server(bmi, port=8080)
只需要 python bmi.py,浏览器打开 http://localhost:8080,立马出现交互页面——不需要写 HTML、也不需要启动 Flask。
和常见 Web 框架的集成PyWebIO 能直接嵌入 Flask、Django、FastAPI、Tornado、aiohttp 等框架,只要把函数包装成 webio_handler(或 asgi_app),路由一挂,功能立马生效。比如在 Flask 中:
from flask import Flaskfrom pywebio.platform.flask import webio_viewfrom pywebio.inputimport *from pywebio.output import *app = Flask(__name__)defhello(): name = input("叫啥名字?") put_text(f"你好啊,{name}!")app.add_url_rule('/hello', 'hello', webio_view(hello))if __name__ == '__main__': app.run(port=5000)
优缺点速评
| |
| ❌ UI 受限:不适合做复杂的前端动画或自定义组件 |
| ❌ 布局灵活度:相对 React/Vue,布局控制不够细粒度 |
| |
| |
| ❌ 部署选项:生产环境仍建议放在成熟的 Web 框架里 |
总结如果你是数据科学家、教学老师、或者想快速把命令行脚本搬到网页上展示的开发者,PyWebIO 简直是救星——省去前端学习成本、保持 Python 脚本的简洁性,同时还能接入 Plotly、Bokeh 之类的可视化库。虽然它不适合做「炫酷」的商业产品 UI,但对内部工具、实验原型、教学演示,简直是「一键成神」的存在。
一句话概括:用 Python 写交互网页,就像用 Python 写命令行一样轻松——这就是 PyWebIO!
项目地址:https://github.com/pywebio/PyWebIO