Рубрики
Без рубрики

Использование Pyinstaller для упаковки Kivy и Kivymd настольные приложения

Упаковка Kivy Applications может быть довольно пугающей. Документация может быть довольно запутанной на … Tagged с Python, Kivymd, Pyinstaller, Appdevelopment.

Упаковка 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 Но я надеюсь, что вы сможете чему -то из этого научиться.

Для получения дополнительной информации, посмотрите:

Оригинал: “https://dev.to/ngonidzashe/using-pyinstaller-to-package-kivy-and-kivymd-desktop-apps-2fmj”