Kivy 简明教程

Kivy - Packaging

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

当你开发一个 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 等。

该应用程序有一个规格文件。我们需要编辑此规格文件来添加依赖项挂钩以正确构建 exe。

使用你喜欢的编辑器打开该规格文件,并在该规格的开头添加这些行 −

from kivy_deps import sdl2, glew

向下滚动该规格文件以找到 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 中构建该规格文件

python -m PyInstaller ImageBtnApp.spec

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

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

pyinstaller --onefile -n ImageBtnApp

为了构建针对 Android 的可分发包,你需要使用 Buildozer 工具。它将下载并设置用于 pythonfor-android 的所有先决条件,包括 android SDK 和 NDK,然后构建一个可以自动推送到设备的 apk。

导航到你的项目目录,然后运行 −

buildozer init

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

buildozer android debug deploy run

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