Flet 用 Python 做跨端应用,一份代码之后还有六种交付
据 Flet 9 月 15 日发布的 1.0 公告,这个建立在 Flutter 之上的框架正式走到 1.0,继续以 Python 构建桌面、移动和 Web 应用。它的吸引力很直接:已有 Python 能力的人,不必先换一套语言才能做出可交互界面。
作者:林岚|OC 开发者生态编辑
据 Flet 9 月 15 日发布的 1.0 公告,这个建立在 Flutter 之上的框架正式走到 1.0,继续以 Python 构建桌面、移动和 Web 应用。它的吸引力很直接:已有 Python 能力的人,不必先换一套语言才能做出可交互界面。
一句话结论:Flet 能合并一部分开发工作,但跨平台真正贵的部分,还包括依赖、部署和各个平台的验收。
对于手里已经有数据处理脚本或内部工具的团队,做界面常常像另开一个项目。业务逻辑在 Python,界面又要学习另一套技术,原本只想让同事少输几个命令,最后却维护起两支代码队伍。Flet 切中的就是这类摩擦。
它提供基于 Flutter 的控件和服务,并支持把应用交付到 iOS、Android、Windows、macOS、Linux 与 Web。这里的“一份代码”,更接近共享大部分逻辑和界面定义,不是六个平台的差别从此消失。
浏览器里跑,还是服务器上跑
Flet 的 Web 交付包含不同路线:可以利用 Pyodide 在浏览器执行 Python,也可以把 Python 逻辑留在服务器,与前端保持连接。这不是一个可以随便略过的构建选项,而是产品架构决定。
前一种方式把计算推向用户设备,需关注初次加载、浏览器资源和依赖兼容;后一种方式则把可用性、并发与连接管理交给服务端。是否可以离线、数据经过哪里、多人同时使用时由谁承担计算成本,都随之变化。浏览器执行也不自动等于完全离线,应用自己调用外部接口仍会产生网络访问。

能打包,不代表包里的东西都能用
Python 开发者最容易低估的是第三方依赖。有些库主要是 Python 代码,有些带着本地扩展或依赖系统能力。官方提供面向移动平台的预构建包支持,并不意味着任何 pip 依赖都能原样塞进手机。
因此,一个计算脚本迁移成功,和它的完整工作流能在手机运行,中间可能还隔着文件选择、后台状态、键盘、网络切换以及权限申请。工程团队最好先验证最难的一条真实流程,而不是先把所有页面铺满,再发现核心库无法交付。
1.0 的新意,不只是版本号
官方把设备端集成测试、移动依赖包构建和更可预期的升级策略作为此次里程碑的重要依据。其中,flet test 可以在打包后的应用中操作界面,检验完整用户流程。这比只证明 Python 函数返回正确更接近真实交付,但框架自己的测试仍不能覆盖每个应用的业务逻辑。
老项目还要注意:从 0.28 迁移并非直接替换版本号。公告明确提到事件处理模型变化,过去放在同步处理器中的阻塞操作,迁移后可能卡住界面。这是一个很具体的升级成本:共享代码减少了平台分叉,却没有免除运行模型改变时的检查。
六种交付,需要六种验收
同一套按钮在大屏桌面上很舒服,放到手机上却可能被键盘遮住;鼠标操作顺手,也不意味着触屏和屏幕阅读器体验合格。这些并非 Flet 特有的缺陷,而是所有跨端产品都要面对的现实。
从项目管理角度看,框架节省下来的工作可以用来做更完整的交付测试,而不是直接删去测试预算。安装与更新、崩溃信息、断网恢复、无障碍支持,以及各应用商店的提交要求,仍然属于产品的一部分。
如果工具面向固定的一小群同事,界面和设备范围都可控,共享代码可能带来明显收益。如果产品高度依赖某个平台的新系统能力,或者需要非常细致的原生交互,则应先确认框架与扩展是否能覆盖需求。这里没有一种路线永远便宜,只有成本被放在了不同地方。
关键事实
- 技术组合:Python 定义应用,界面能力基于 Flutter。
- 目标平台:移动端、三大桌面系统和 Web。
- Web 模式:浏览器执行与服务端执行会带来不同的部署边界。
- 依赖限制:预构建包支持不等于任意 Python 库均可跨端运行。
OC 判断
Flet 最值得关注的不是“不会前端也能做一切”,而是降低现有 Python 工具的产品化门槛。OC 会先看真实依赖能否跑通,再看界面能否复用。一个框架只要明显缩短了某类项目的交付路径,就已经有价值,不必承诺消灭全部平台差异。
为什么重要
- 对 Python 开发者:现有脚本有了更直接的界面化路径。
- 对独立开发者:评估成本时要把打包、分发和长期维护一并算入。
- 对使用者:技术栈是否统一并不重要,安装、输入和出错恢复是否顺畅才重要。
评论
围绕这篇文章补充信息、提出问题或分享观察。