DB-hub Technology 未分类 Python 程序打包

Python 程序打包

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.打包示例流程
  1. 打开 auto-py-to-exe
  2. 选择你的 main.py
  3. 勾选 Onefile 和 无控制台
  4. 添加资源文件(如 CSV、图标)
  5. 点击 转换,生成 exe
  6. 在 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:

  1. 打开 Visual Studio Installer

  2. 找到你安装的 VS 版本 → 点击 修改(Modify)

  3. 勾选:

✔ 使用 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 路径加载资源

Related Post