跳到主要内容

打包桌面应用程序

更好的打包方式

现在,您可以使用 flet build 命令将 Flet 应用程序打包成可执行文件或安装包,适用于 macOS、Windows 和 Linux。

flet build 不再依赖 PyInstaller,如 flet pack 所做的那样,而是使用 Flutter SDK 生成一个快速的、离线的、完全可自定义的可执行文件,包括 Python 运行时嵌入到可执行文件中,并在进程中运行。

按照此指南进行桌面打包

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

Flet 将 PyInstaller API 包装到一起,以便将 Flet Python 应用程序及其所有依赖项打包成一个单独的包,适用于 Windows、macOS 和 Linux。要创建 Windows 包,PyInstaller 必须在 Windows 上运行;要构建 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 转换为平台特定的格式(Windows 的 .ico 和 macOS 的 .icns),但您需要安装 Pillow 模块:

pip install pillow

打包资产

您的 Flet 应用程序可以包括资产。如果应用程序资产位于 assets 文件夹中,您可以使用 --add-data 参数将其添加到应用程序包中,在 macOS/Linux 上:

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

在 Windows 上,使用 ; 分隔符:

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

自定义 macOS 捆绑

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

  • --product-name - 显示名称,显示在 Dock、Activity Monitor 和 About 对话框中。
  • --product-version - 显示在 About 对话框中的版本号。
  • --copyright - 显示在 About 对话框中的版权声明。
  • --bundle-id - 唯一的捆绑 ID。

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

Windows 可执行文件 "详细信息" 对话框可以使用以下 flet pack 参数进行自定义:

  • --product-name - "产品名称" 字段。
  • --product-version - "产品版本" 字段。
  • --file-version - "文件版本" 字段。
  • --file-description - "文件描述" 字段,也是 Task Manager 中的程序显示名称。
  • --copyright - "版权" 字段。

使用 CI 进行多平台打包

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

如果您没有访问 Mac 或 PC 的权限,可以使用 AppVeyor - 一项为 Windows、Linux 和 macOS 提供的连续集成服务。在简短的说法中,连续集成(CI)是指在每次推送到存储库时自动构建、测试和部署(连续交付 - CD)应用程序的过程。

AppVeyor 是一项免费的服务,适用于 GitHub、GitLab 和 Bitbucket 上的开源项目。

::: note AppVeyor 是 Flet 的母公司。 :::

要开始使用 AppVeyor,请注册免费账户

单击 "New project" 按钮,授权 AppVeyor 访问您的 GitHub、GitLab 或 Bitbucket 账户,选择包含您的程序的存储库,然后创建新项目。

现在,要配置应用程序的打包过程,请将以下内容添加到存储库根目录下的 appveyor.yml 文件中。appveyor.yml 是一个构建配置文件,或者 CI 工作流,描述了在每次提交时需要运行的构建、测试、打包和部署命令。

::: note 您可以 fork flet-dev/python-ci-example 存储库并根据需要进行自定义。 :::

每当您推送更改到 GitHub 存储库时,AppVeyor 将自动启动新建:

该 CI 工作流在每次推送到存储库时执行以下操作:

  • 克隆存储库到一个干净的虚拟机。
  • 使用 pip 安装应用程序依赖项。
  • 运行 flet pack 将 Python 应用程序打包成一个捆绑包,适用于 WindowsmacOSUbuntu
  • 压缩/打包应用程序捆绑包,并将其上传到"Artifacts"
  • 在推送新标签时,将应用程序捆绑包上传到 GitHub releases。只需推送新标签以创建发行版!

::: note GITHUB_TOKEN GITHUB_TOKENappveyor.yml 中是 GitHub 个人访问令牌(PAT),用于 AppVeyor 发布创建的包到存储库 "Releases"。您需要生成自己的令牌并将其替换到 appveyor.yml 中。登录到您的 GitHub 账户,并导航到个人访问令牌页面。单击 "Generate new token" 并选择 "public_repo" 或 "repo" 范围,以便在公共或私有存储库中使用。复制生成的令牌并返回到 AppVeyor 门户。导航到加密配置数据页面,并将令牌粘贴到 "Value to encrypt" 字段中,然后单击 "Encrypt" 按钮。将加密值放在 appveyor.yml 中的 GITHUB_TOKEN 下。 :::

配置 AppVeyor 为您的 Python 项目,推送新标签到存储库,然后 "自动" 获取桌面捆绑包所有三个平台在 GitHub releases 中! 🎉

此外,您还可以将工件发布到 Amazon S3 存储桶Azure Blob 存储