Kivy - 打包



“打包”是指创建一个应用程序源代码的单个包,以及所有依赖项,包括库、数据文件、配置文件等。

开发 Kivy 应用时,需要各种资源。例如,常见的需求是 sdl2 包或 glew 包。安装 Kivy 时,也会安装这些依赖项。

kivy-deps.glew
kivy-deps.gstreamer
kivy-deps.sdl2

到目前为止,你一直在已经安装了 Python 运行时的机器上运行 Kivy 应用。但是,当需要将此应用程序移植到另一台未安装 Python 的机器时,你需要构建一个包含程序以及 Python 运行时和依赖项的包。

PyInstaller 包可以帮助你构建应用程序的可再发行包。用户无需安装 Python、Kivy 或任何其他库即可运行该应用程序。

要构建这样的可再发行包,你应该首先使用 PIP 命令在当前 Kivy 环境中安装 PyInstaller。

pip3 install -U pyinstaller

下一步是收集一个或多个 Python 源文件(扩展名为 .py),以及其他资源,例如图像文件等,到一个单独的文件夹中。

在本练习中,我们将为 ImageButton 应用构建一个包。此应用的文件存储在 imgbtn 文件夹中。

Directory of C:\kivyenv\imgbtn
forward.png main.py pause.png play.png
previous.png

创建另一个文件夹 ImangBtnApp,它最终将存储可再发行包。在文件夹内,执行以下命令:

(kivyenv) C:\kivyenv\ImageBtnApp>pyinstaller -n ImageBtnApp
c:\kivyenv\imgbtn\main.py

Kivy 应用有很多依赖项。因此,收集所有依赖项可能需要一段时间。最终,ImageButtonApp 文件夹将包含:

Directory of C:\kivyenv\ImageBtnApp

27-07-2023 21:25    <DIR>           .
27-07-2023 21:07    <DIR>           ..
27-07-2023 21:25    <DIR>           build
27-07-2023 21:28    <DIR>           dist
27-07-2023 21:25                    970 ImageBtnApp.spec

dist 文件夹是可再发行文件夹,其中包含 EXE 文件“ImageBtnApp.exe”以及所需的 DLL 库,例如 sdl2 等。

有一个与应用程序同名的 spec 文件。我们需要编辑 spec 文件以添加依赖项钩子,以便正确构建 exe。

使用你喜欢的编辑器打开 spec 文件,并在 spec 文件开头添加以下几行:

from kivy_deps import sdl2, glew

向下滚动 spec 文件,找到 COLLECT 部分,并为每个依赖项路径添加一个 Tree 对象。例如,`*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)]`。

coll = COLLECT(
   exe, Tree('c:\\kivyenv\\imgbtn\\'),
   a.binaries,
   a.zipfiles,
   a.datas,
   *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
   strip=False,
   upx=True,
   upx_exclude=[],
   name='ImageBtnApp',
)

现在,我们使用以下命令在 ImageBtnApp 中构建 spec 文件:

python -m PyInstaller ImageBtnApp.spec

编译后的包将位于 ImageBtnApp\dist\ImageBtnApp 目录中。

你还可以使用 Pyinstaller 命令行语法的 -onetime 开关将运行时、应用程序代码和依赖项放在单个文件中(而不是可再发行包中):

pyinstaller --onefile -n ImageBtnApp

要构建面向 Android 的可再发行包,你需要使用 Buildozer 工具。它将下载并设置 python-for-android 的所有先决条件,包括 android SDK 和 NDK,然后构建一个可以自动推送到设备的 apk。

导航到你的项目目录并运行:

buildozer init

这将创建一个 buildozer.spec 文件,用于控制你的构建配置。使用你的应用程序名称等编辑该文件。你可以设置变量来控制传递给 python-for-android 的大部分或所有参数。最后,插入你的 Android 设备并运行:

buildozer android debug deploy run

以构建、推送并在你的设备上自动运行 APK。

广告