跳到主要内容

打包桌面应用程序 Packaging desktop app

Flet Python 应用程序及其所有依赖项可以通过打包成可执行文件的方式,让用户在其计算机上运行应用程序,而无需安装 Python 解释器或任何模块。

Flet 使用 PyInstaller API 来将 Flet Python 应用程序及其所有依赖项打包到一个单独的包中,以供 Windows、macOS 和 Linux 使用。要创建 Windows 包,必须在 Windows 上运行 PyInstaller;要构建 Linux 应用程序,必须在 Linux 上运行;要构建 macOS 应用程序,则在 macOS 上运行。

首先安装 PyInstaller:

pip install pyinstaller

导航到你的 .py 文件所在的目录,并使用以下命令构建你的应用程序:

flet pack your_program.py

你打包的 Flet 应用程序现在应该在 dist 文件夹中。尝试运行该程序,看看是否可以正常工作。

在 macOS 上:

open dist/your_program.app

在 Windows 上:

dist\your_program.exe

在 Linux 上:

dist/your_program

现在,你只需要将 dist 文件夹的内容压缩,并分发给用户即可!他们不需要安装 Python 或 Flet 也可以运行你打包的程序 - 这是一个很好的替代 Electron 的方式!

默认情况下,可执行文件/包的名称与 Python 脚本相同。你可以使用 --name 参数更改它:

flet pack your_program.py --name bundle_name

自定义包图标

默认的包应用程序图标是软盘,对于那些错过了那个存储计算机数据的古老时代的年轻开发人员来说,这可能会让人困惑。

你可以通过添加 --icon 参数来将图标替换为自己的图标:

flet pack your_program.py --icon <your-image.png>

PyInstaller 将会将提供的 PNG 转换为特定平台的格式(.ico 用于 Windows,.icns 用于 macOS),但你需要安装 Pillow 模块:

pip install pillow

打包资源

你的 Flet 应用程序可以包括 资源。如果提供的应用程序资源位于与 your_program.py 并列的 assets 文件夹中,可以使用 --add-data 参数将其添加到应用程序包中,在 macOS/Linux 上:

flet pack your_program.py --add-data "assets:assets"

在 Windows 上,assets;assets 必须以 ; 分隔:

flet pack your_program.py --add-data "assets;assets"

自定义 macOS 包

可以使用以下 flet pack macOS 特定参数自定义 macOS 包的详细信息:

  • --product-name - macOS 包的显示名称,显示在 Dock、活动监视器、关于对话框中。
  • --product-version - 包版本显示在 "关于" 对话框中。
  • --copyright - 版权信息显示在 "关于" 对话框中。
  • --bundle-id - 唯一的包 ID。

自定义 Windows 可执行文件元数据

可以使用以下 flet pack 参数自定义 Windows 可执行文件的 "详情" 属性对话框:

  • --product-name - "产品名称" 字段。
  • --product-version - "产品版本" 字段。
  • --file-version - "文件版本" 字段。
  • --file-description - "文件说明" 字段,也是任务管理器中程序的显示名称。
  • --copyright - "版权" 字段。

使用 CI 进行多平台打包

要在特定操作系统上使用 PyInstaller 创建应用程序包,必须在该操作系统上运行它。

如果你没有 Mac 或 PC 的访问权限,你可以使用 AppVeyor 为 Windows、Linux 和 macOS 打包你的应用程序 - 这是一个用于 Windows、Linux 和 macOS 的持续集成服务。简而言之,持续集成(CI)是指在每次提交时自动构建、测试和部署(持续交付 - CD)应用程序的自动化过程。

AppVeyor 对于在 GitHub、GitLab 和 Bitbucket 上托管的开源项目是免费的。要使用 AppVeyor,请将你的应用程序推送到其中一个源代码托管提供程序中的存储库。

备注

AppVeyor 是 Flet 的背后公司。

要开始使用 AppVeyor,请注册一个免费帐户

点击 "新建项目" 按钮,授权 AppVeyor 访问你的 GitHub、GitLab 或 Bitbucket 帐户,选择一个带有你的程序的仓库并创建一个新项目。

现在,要配置你的应用程序在 Windows、Linux 和 macOS 上的打包过程,请将以下内容的文件添加到仓库根目录的 appveyor.yml 文件中。appveyor.yml 是构建配置文件或 CI 工作流程,描述了必须在每个提交上运行的构建、测试、打包和部署命令。

备注

你可以直接 fork flet-dev/python-ci-example 存储库并根据你的需求进行自定义。

当你将任何更改推送到 GitHub 存储库时,AppVeyor 将自动开始一个新的构建:

每次推送到存储库时,这个CI 工作流程都会进行以下操作:

  • 克隆存储库到一个干净的虚拟机中。
  • 使用 pip 安装应用程序的依赖项。
  • 运行 flet pack 将 Python 应用程序打包为 WindowsmacOSUbuntu 程序包。
  • 将应用程序包压缩并上传到 "Artifacts"
  • 在推送新标签时,将应用程序包上传到 GitHub Releases。只需推送一个新标签即可发布!
GITHUB_TOKEN

appveyor.yml 中的 GITHUB_TOKEN 是 AppVeyor 用于将创建的包发布到存储库 "Releases" 的 GitHub 个人访问令牌(PAT)。你需要生成自己的令牌,并在 appveyor.yml 中替换它。登录到你的 GitHub 帐户,导航到 个人访问令牌 页面。点击 "生成新令牌",并选择 "public_repo" 或 "repo" 范围以适用于公开或私有存储库。将生成的令牌复制到剪贴板,返回 AppVeyor Portal。导航到 Encrypt configuration data 页面,将令牌粘贴到 "Value to encrypt" 字段,点击 "Encrypt" 按钮。将加密后的值放在你的 appveyor.yml 下的 GITHUB_TOKEN 中。

配置你的 Python 项目的 AppVeyor,推送一个新的标签到存储库,并在 GitHub Releases 中 "不费吹灰之力" 地获取适用于所有三个平台的桌面包!🎉

除了 GitHub Releases 外,你还可以将生成的包发布到 Amazon S3 存储桶Azure Blob 存储