一直以来,Flutter 和 Python 都像两个世界:
- Flutter 负责 UI
- Python 负责人工智能/脚本/自动化
如果使得两者配合,通常只能:
- 调接口
- 起服务
- 使用WebSocket
- 或嵌入完整的Python环境
问题是:
太重、太复杂、跨平台困难。
而最近,一个新的方向开始出现:
直接在 Dart / Flutter 里运行 Python。
这就是dart_monty。
一、它是什么?
dart_monty是一个:
面向 Dart / Flutter 的 Python 沙箱解释器绑定。
它基于:
- Rust 实现的 Monty Python 解释器
- 提供纯Dart API
- 支持 Flutter 和 Dart
核心目标非常明确:
让Flutter可以安全运行Python脚本。
而且重点是:
- 不依赖系统 Python
- 需要安装Python环境
- 支持网页/桌面/移动
这一点非常关键。
二、为什么这个东西很特别?
传统 Flutter 调 Python:
1Flutter → HTTP → Python Server
问题:
而dart_monty的思路是:
1Flutter → 本地 Python 沙箱
直接在应用内部执行Python。
即:
Python不再是“远程服务”,而是“应用程序”。
三、核心能力拆解
1.直接执行Python
最基础能力:
1final monty = Monty();
2
3final result = await monty.run('2 + 2');
4
5print(result.value); // 4
几行代码:
没有:
四、真正关键的能力:沙箱(Sandbox)
这不是完整的 Python。
而是:
受限制的安全Python子集。
为什么重要?
因为直接嵌入Python最大的问题就是:
同时它提供:
例如:
1limits: MontyLimits(
2 timeoutMs: 5000,
3 memoryBytes: 10 * 1024 * 1024,
4)
这意味着:
Python脚本不会“炸掉App”。
五、支持Web(这是重点)
很多人第一次看到都会忽略这一点:
它不仅支持Native,还支持Web。
网页版本:
即:
同一套Dart API:
这在Dart生态里其实非常少见。
六、外部函数桥接(最强功能)
这是整个架构里最方便的部分。
Python 可以直接调用 Dart 提供的函数。
例如:
Python:
1fetch("https://api.example.com")
镖:
1externalFunctions: ['fetch']
当Python调用fetch()时:
- Dart 占领执行
- 完成 HTTP 请求
- 再把结果返回 Python
这意味着:
Python脚本可以“控制Flutter App”。
七、插件系统(开始像AI Agent了)
项目甚至已经开始支持:
例如:
1weather_forecast()
Python可以动态调用:
这已经非常接近了:
“本地AI代理运行时”
了。
八、状态持久化(Session)
技术支持:
1x = 42
2y = x * 2
后续脚本仍能访问之前的参数。
这意味着:
Python可以拥有“纵向上下文”。
非常适合:
九、取消执行(非常关键)
很多剧本系统都会卡死:
1whileTrue:
2pass
同时它支持:
1token.cancel()
强制中断解释器。
这一点对移动端尤其重要。
十、它最适合什么场景?
1. 人工智能代理
让Python负责:
颤振负责:
2. 用户脚本系统
类似:
3. 本地AI应用
例如:
4. 教育/编程平台
直接在Flutter中运行Python:
十一、为什么它可能很重要?
过去:
1Flutter = UI
2Python = AI
现在开始变成:
1Flutter + Python = 本地 AI Runtime
趋势实际上已经越来越明显:
都需要:
“安全的脚本环境”。
而dart_monty正好踩在这个方向上。
十二、需要理性看待问题
1. 不完整的Python
很多库不能直接运行。
目前更适合:
而不是:
2.生态还早期
版本目前快速变化。
3.移动端支持仍在推进
当前:
- macOS / Linux / Web 已支持较好
- iOS / Android 尚完善中
十三、它的真正意义
这个项目真正的位置,不仅仅是:
“Flutter 能运行 Python”
而是:
Dart 开始拥有“嵌入式脚本能力”。
这意味着未来的 Flutter 可能不仅仅是:
还可能变成:
十四、总结
dart_monty的价值,可以用一句话来形容:
把Python,从“外部服务”,变成“Flutter内部能力”。
它带来的不是:
而是:
如果你正在做:
这个方向,非常值得关注。