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 文件夹中。
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 工具。它会下载并设置 pythonfor-android 的所有先决条件,包括 android SDK 和 NDK,然后构建一个可以自动推送到设备的 apk。
导航到您的项目目录并运行 −
buildozer init
这会创建一个 buildozer.spec 文件来控制您的构建配置。使用您的应用名称等编辑文件。您可以设置变量来控制传递给 python-for-android 的大多数或所有参数。最后,插入您的 android 设备并运行 −
buildozer android debug deploy run
在您的设备上构建、推送和自动运行 APK。