1.Flet 如何打包
1.1.Flet 打包 APK(Android)
Flet 本身是一个 Python 桌面/网页应用框架,它打包 APK 的方式通常是通过 BeeWare / Briefcase / Chaquopy / Buildozer 等工具:
- Python 代码 + Flet GUI → 打包成 Android App
-
Flet 框架在 APK 内嵌了一个 WebView 或者 Chromium runtime
-
生成的 APK 可以直接安装在手机上
关键点:Python 需要转成 Android 可运行格式(.so 库 + APK 包),这是手机端需要的。
1.2.Flet 打包 EXE(Windows)
Windows 下没有原生 Python 可执行文件,所以需要通过 Python 打包工具 生成 EXE:
- PyInstaller:最常用,直接把 Python 解释器 + 依赖库 + Flet runtime 打包成单个 exe 文件
-
Nuitka:把 Python 编译成 C,再生成 exe,运行效率更高
-
cx_Freeze:另一种打包工具,也可生成 exe
Flet Desktop 应用打包成 exe 后,会把 Chromium runtime(或 WebView)一起打包,所以体积会比较大。
1.3.Flet 打包 APK 和 EXE比较
| 平台 | 打包方式 | 工具/原理 | 注意事项 |
|---|---|---|---|
| Android | 转成 APK | Buildozer / BeeWare / Chaquopy | Python 转 Android 可运行库,WebView 显示 Flet GUI |
| Windows | 打包 EXE | PyInstaller / Nuitka / cx_Freeze | 把 Python 解释器 + 依赖库 + Flet runtime 打包成单文件或独立文件夹 |
本质区别:Android 需要跨平台 Python runtime,而 Windows 可以直接打包 Python 解释器和依赖成 exe。
- Flet 可以打包成 EXE,只是需要用 Python 的打包工具,而不是 Flet 自带功能
-
APK 打包是针对手机端的跨平台方式,需要额外工具
-
两者都是把 Python + Flet runtime 封装成可执行环境,只是目标平台不同
2.auto-py-to-exe
2.1.什么是 auto-py-to-exe
auto-py-to-exe = PyInstaller 的 GUI 版本,非常适合不熟悉命令行的新手快速打包 Python 应用为 Windows exe,包括 Flet、Tkinter、PyQt 等 GUI 应用。
- auto-py-to-exe 是一个 图形化界面的 PyInstaller 封装工具
-
本质上它调用 PyInstaller,把 Python 脚本打包成 exe
-
优点是可视化配置打包选项,不需要记忆复杂的命令行参数
-
支持打包成:
单文件 exe (–onefile)
文件夹 exe (–onedir) -
支持添加资源文件、图标、隐藏控制台窗口等
2.2.安装方法
pip install auto-py-to-exe
然后运行:
auto-py-to-exe
会打开一个 图形界面。
2.3.常用功能
1.选择 Python 脚本
- 入口文件(如 main.py)
2.打包模式
- Onefile:生成单个 exe
- Onedir:生成 exe + 依赖文件夹
3.附加文件 / 资源
- 可以添加 CSV、配置文件、图标等
-
PyInstaller 的 –add-data 功能在 GUI 中可视化操作
4.图标
- 可以设置 exe 图标 (–icon)
5.控制台选项
- GUI 应用可以勾选“无控制台窗口” (–noconsole)
6.高级选项
- 可以自定义 PyInstaller 的额外参数,比如隐藏控制台、额外模块等
7.一键打包 / 命令预览
- GUI 会生成对应的 PyInstaller 命令
-
可以直接在命令行使用,也可以在 GUI 中点击“转换”生成 exe
2.4.打包示例流程
- 打开 auto-py-to-exe
- 选择你的 main.py
- 勾选 Onefile 和 无控制台
- 添加资源文件(如 CSV、图标)
- 点击 转换,生成 exe
- 在 output 文件夹中找到 exe 文件
2.5.优缺点
| 优点 | 缺点 |
|---|---|
| 图形化界面,易上手 | 体积大,Onefile exe 会很大(Flet Desktop 本身几十 MB) |
| 支持添加资源和图标 | GUI 操作可能对高级参数限制 |
| 支持生成命令行命令 | 依赖 PyInstaller,打包速度慢 |
3.Nuitka
Nuitka 是一个 真正的 Python 编译器(Compiler),和 PyInstaller、auto-py-to-exe 这种“打包工具”完全不同。可以简单说:
- PyInstaller = 打包器
- Nuitka = 编译器
Nuitka 是一款把 Python 代码编译成真正的 C 代码,然后再编译成机器码(exe)的编译器。
它的特点包括:
- 不是把代码打包,而是 把 Python 程序“编译”成 C
-
最终生成的 exe 运行速度通常更快(因为是机器码)
-
更难被反编译(比 PyInstaller 更安全)
-
对第三方模块兼容很好(包括 Flet)
Nuitka vs PyInstaller
| 特点 | PyInstaller / auto-py-to-exe | Nuitka |
|---|---|---|
| 性质 | 打包器 | 编译器 |
| 原理 | 把 .py 文件 + Python 解释器一起打包 | 把 Python 编译成 C,再编译成机器码 |
| 性能 | 速度基本不变 | 可能更快(取决于代码) |
| 安全性 | 可反编译 | 很难反编译 |
| 生成文件大小 | 比较大 | 一般更大(包含 C runtime) |
| 稳定性 | 较好 | 更好,对依赖处理更干净 |
| 打包速度 | 快 | 慢(要编译) |
许多人用它来打包:
- Flet desktop apps
-
Streamlit
-
Tkinter
-
PySide/PyQt
-
CLI 工具
3.1.安装 Nuitka
pip install nuitka
3.2.安装 MSVC
安装 MSVC 编译器(Visual Studio Build Tools),因为 Nuitka 需要编译器生成 exe。
Windows 下推荐安装 Visual Studio 2019/2022 Community 的 C++ Build Tools。
3.2.1.下载 Visual Studio Build Tools
访问官方页面:
https://visualstudio.microsoft.com/visual-cpp-build-tools/
点 “Download Build Tools”(下载 vs_BuildTools.exe)。
3.2.2.运行安装程序
打开 vs_BuildTools.exe
3.2.3.勾选必须的工作负载
在 “工作负载(Workloads)” 标签页选择:
✔ 使用 C++ 的桌面开发(Desktop development with C++)
它会自动勾选:
- MSVC v143 / v142 编译工具链
-
Windows 10 SDK / Windows 11 SDK
-
C++ 标准库
-
链接器 / 调试工具
这些都是 Nuitka 所需要的。
3.2.4.点击右下角 “安装”
安装过程大概 2–10 分钟。
完成后,MSVC 就正确安装了。
3.2.5.通过完整 Visual Studio 安装(更大)
如果你有完整 Visual Studio:
- 打开 Visual Studio Installer
-
找到你安装的 VS 版本 → 点击 修改(Modify)
-
勾选:
✔ 使用 C++ 的桌面开发
点击 安装即可。
3.2.6.如何验证 MSVC 是否安装成功?
- 打开 开始菜单
- 搜索 “x64 Native Tools Command Prompt for VS 20xx” (根据你 VS 版本,可能是 2022 或 2019)
- 打开后输入:
cl
如果出现类似:
Microsoft (R) C/C++ Optimizing Compiler Version 19.x.xxxx
说明 MSVC 安装成功。
配置环境变量:
3.2.7.找到你的 MSVC 安装路径
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
将路径加入系统 PATH, 系统path需要重启才生效。用户path不需要重启。
3.3.设置 Flet 桌面模式(可选)
为了保证打包后的 exe 使用桌面模式,设置 Flet 桌面模式(可选)
import os
os.environ["FLET_PLATFORM"] = "desktop"
把这行代码放在应用入口文件(如 main.py)的最顶部。
3.4.Nuitka 打包命令
python -m nuitka ^
--onefile ^
--standalone ^
--windows-console-mode=disable ^
--windows-icon-from-ico=assets/icon.png ^
--output-dir=build ^
main.py
参数说明:
| 参数 | 作用 |
|---|---|
| –onefile | 打包成单个 exe 文件 |
| –standalone | 独立运行,不依赖 Python 环境 |
| –enable-plugin=tk-inter | Nuitka GUI 插件,避免 console 窗口 |
| –windows-console-mode | 不显示命令行窗口 |
注意:Flet Desktop 默认依赖 Chromium runtime,Nuitka 会把运行时也打包进 exe。
Windows 的 .exe 图标需要 ICO 格式。Nuitka 可以自动把 PNG 转 ICO,但需要 imageio 库。
pip install imageio
3.5.打包资源文件
如果你有 CSV、配置文件或图标等资源,需要手动复制到 exe 运行目录,或者在代码中动态使用 os.path.join(os.path.dirname(sys.executable), “filename”) 来加载资源。
3.6.运行 exe
-
打包完成后,生成的 exe 在 main.dist 或当前目录下
-
直接双击即可运行
-
第一次运行可能较慢,因为会解压 Chromium runtime。
3.7.常见问题
| 问题 | 解决方法 |
|---|---|
| 打开 exe 闪退或空白 | 确保 FLET_PLATFORM=desktop 设置正确,且 Chromium runtime 能正常加载 |
| exe 体积过大 | Desktop 模式打包 Chromium,本身几十 MB 是正常 |
| 找不到资源文件 | 在 exe 目录下放置 CSV / 配置文件,或者使用 sys.MEIPASS 路径加载资源 |

