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。

廣告