Упаковка Kivy Applications может быть довольно пугающей. Время от времени документация может быть довольно запутанной. Это руководство проведет вас, как упаковать приложение Kivymd для Windows Использование Pyinstaller с помощью простого примера.
Давай вдамся! 🙂
Я предполагаю, что у вас уже есть Киви и kivymd Установлен в виртуальной среде.
Первый шаг – установить Pyinstaller с PIP. Откройте терминал командной строки, активируйте свою виртуальную среду и введите в следующее:
PIP установить Pyinstaller
Создайте два файла:
main.py
– который будет содержать основной код.main.kv
– который будет содержать код, написанный в Kivy Lang
Примечание: Эти файлы должны быть в том же каталоге.
Внутри main.py
, введите следующий код:
import os, sys from kivy.resources import resource_add_path, resource_find from kivymd.app import MDApp class MainApp(MDApp): def build(self): self.theme_cls.primary_palette = "DeepPurple" if __name__ == '__main__': try: if hasattr(sys, '_MEIPASS'): resource_add_path(os.path.join(sys._MEIPASS)) app = MainApp() app.run() except Exception as e: print(e) input("Press enter.")
Приведенный выше код очень важен, когда дело доходит до упаковки нашего приложения. Оператор Try-Catch помогает нам определить ошибки в нашей программе и Input («Нажмите Enter.»)
Остановит консоль от закрытия, прежде чем мы захотим ее.
Редактировать main.kv
:
MDRectangleFlatButton: text: "Hello World" pos_hint: {'center_x': .5, 'center_y': .5}
Мы просто собираемся отобразить простую кнопку.
Сохраните файлы, затем откройте терминал командной строки, активируйте свою среду и перейдите в папку, содержащую два файла.
Теперь, прежде чем начать процесс упаковки, убедитесь, что когда вы запустите свое приложение, вы не получаете никаких консольных ошибок.
Тип Pyinstaller -Onefile main.py
В командной строке и нажмите Enter.
Когда выполнение завершено, в каталоге должны были быть созданы две папки, содержащие main.py
; Dist
и сборка
и файл с именем main.spec
Анкет
Перейдите в Dist
папка. Внутри это есть исполняемый файл, main.exe
Анкет Если вы дважды щелкните по нему, терминал откроется и закроется очень быстро.
Чтобы решить эту проблему, добавьте следующие строки в верхнюю часть main.spec
:
from kivy_deps import sdl2, glew from kivymd import hooks_path as kivymd_hooks_path
Примечание: Если вы не упаковываете приложение Kivymd, нет необходимости во втором импорте или изменении Hookspath
как показано вскоре ниже.
Добавить в Анализ
линии:
a = Analysis( #... datas=[('main.kv', '.')], hookspath=[kivymd_hooks_path], #... )
DataS
состоит из списка кортежей, где первый элемент в кортеже – это имя файла, а второй элемент – это каталог, который будет использоваться для хранения файла. Если, например, у вас была папка с именем изображений в том же каталоге, что и main.py
, вы бы добавили их следующим образом:
datas = [(‘main.kv’, ‘.’), (‘./images/*.png’, ‘images’)],
Вышеприведенная линия в основном говорит: «Получите все png Изображения в папке изображений и сохранить их в папке с именем изображения в окончательном приложении.
Следующий , редактировать Exe
:
exe = EXE( #... *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], #.... )
Финал main.spec Файл выглядит так:
# -*- mode: python ; coding: utf-8 -*- block_cipher = None from kivy_deps import sdl2, glew from kivymd import hooks_path as kivymd_hooks_path a = Analysis(['main.py'], pathex=['C:\\Users\\path\\to\\file'], binaries=[], datas=[('main.kv', '.')], hiddenimports=[], hookspath=[kivymd_hooks_path], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], name='main', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True )
Теперь сохранить и запустить: Pyinstaller main.spec
в терминале.
После того, как он закончил выполнение, попробуйте выполнить main.exe
очередной раз.
И это все! Вы успешно упаковали свое приложение.
Ошибки, с которыми вы можете столкнуться
Вы можете столкнуться с ошибками импорта при запуске Pyinstaller. Я столкнулся с ошибками, импортирующими Pyenchant и CV2. Их можно легко исправить, запустив следующие команды в вашем терминале:
PIP установить Pyenchant
PIP установить OpenCV-Python
После завершения установки запустите Pyinstaller main.spec
В вашем терминале и попробуйте выполнить main.exe
очередной раз.
Последние мысли
Я надеюсь, что это руководство может оказаться полезным для вас. Это ни в коем случае не полное руководство, охватывающее все аспекты упаковки приложения Kivy для Windows Но я надеюсь, что вы сможете чему -то из этого научиться.
Для получения дополнительной информации, посмотрите:
- Этот пост на Stackoverflow.
- Киви документация Анкет
- Pyinstaller
Оригинал: “https://dev.to/ngonidzashe/using-pyinstaller-to-package-kivy-and-kivymd-desktop-apps-2fmj”