打包桌面应用程序
现在,您可以使用 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 应用程序打包成一个捆绑包,适用于 Windows、macOS 和 Ubuntu。 - 压缩/打包应用程序捆绑包,并将其上传到"Artifacts"。
- 在推送新标签时,将应用程序捆绑包上传到 GitHub releases。只需推送新标签以创建发行版!
::: note GITHUB_TOKEN
GITHUB_TOKEN
在 appveyor.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 存储。