Невозможно создать .exe с python kivy на windows (Pyinstaller) - PullRequest
0 голосов
/ 21 июня 2020

Итак, я пытаюсь сделать .exe из python кода kivy, .exe создается, но не открывается. Нет сообщения, ничего. Я проверяю журналы, но там нет проблем, так что я здесь полностью в темноте. Я использую следующий .spe c

# -*- mode: python -*-

block_cipher = None
from kivy_deps import sdl2, glew, gstreamer
spec_root = os.path.abspath(SPECPATH)
app_name = 'Gameficacao'

a = Analysis(['C:/Users/Artur/PycharmProjects/gameficacao/Gameficacao.py'],
             pathex=[spec_root],
             datas=[('C:/Users/Artur/PycharmProjects/gameficacao/*.kv', '.'), ('C:/Users/Artur/PycharmProjects/gameficacao/img/*.png', './img'),('C:/Users/Artur/PycharmProjects/gameficacao/font/*.ttf', './font'),('C:/Users/Artur/PycharmProjects/gameficacao/som/*.mp3', './som')],
             hiddenimports=['win32timezone'],
             hookspath=[],
             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,
          [],
          exclude_binaries=True,
          name=app_name,
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=False,
          console=False)
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               *[Tree(p)
for p in (sdl2.dep_bins + glew.dep_bins +  gstreamer.dep_bins)],
               strip=False,
               upx=False,
               name=app_name)

Если у вас есть что-нибудь, что может мне помочь (НИЧЕГО), дайте мне знать.

Ответы [ 3 ]

1 голос
/ 03 июля 2020

Хорошо, я разобрался. ПРЕЖДЕ ВСЕГО, если у вас возникла эта проблема, вам нужно сначала добавить следующую строку в свой код:

def reset():
    import kivy.core.window as window
    from kivy.base import EventLoop
    if not EventLoop.event_listeners:
        from kivy.cache import Cache
        window.Window = window.core_select_lib('window', window.window_impl, True)
        Cache.print_usage()
        for cat in Cache._categories:
            Cache._objects[cat] = {}

if __name__ == '__main__':
    reset()
    'your app name here'().run()

Это предотвратит запуск приложения (например, когда оно выглядит как загрузка, но ничего не открывается). ПОСЛЕ ЭТОГО вы хотите построить с помощью spe c вот так:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None
from kivy_deps import sdl2, glew, gstreamer


a = Analysis(['C:\\Users\\Artur\\PycharmProjects\\gameficacao\\Gameficacao.py'],
             pathex=['C:\\Users\\Artur\\Desktop\\Trabalho\\Gameficacao'],
             binaries=[],
             datas=[('C:/Users/Artur/PycharmProjects/gameficacao/*.kv', '.'), ('C:/Users/Artur/PycharmProjects/gameficacao/img/*.png', './img'),('C:/Users/Artur/PycharmProjects/gameficacao/font/*.ttf', './font'),('C:/Users/Artur/PycharmProjects/gameficacao/som/*.mp3', './som')],
             hiddenimports=['pkg_resources.py2_warn','win32timezone','six','packaging','packaging.version','webbrowser','kivy','enchant'],
             hookspath=[],
             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,
          [],
          exclude_binaries=True,
          name='Gameficacao',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins +  gstreamer.dep_bins)],
               strip=False,
               upx=True,
               upx_exclude=[],
               name='Gameficacao')

Теперь некоторые вещи здесь ОЧЕНЬ ВАЖНЫ, и приложение, вероятно, не будет работать без него, а именно:

  1. Строка "from kivy_deps import sdl2, glew, gstreamer" , справа вверху
  2. Заполнение информационной части Анализа, здесь вам нужно будет указать путь к каждому файлу, который вы будете использовать в своем приложении, включая файл kivy. В качестве примера используйте мой.
  3. Строка hiddenimports , здесь вы укажете на каждый импорт, который имеет отношение к вашему приложению и который PyInstaller не может сделать. Для начала вы, вероятно, захотите поместить 'pkg_resources.py2_warn' , поскольку PyInstaller не может правильно импортировать его, и он вам понадобится.
  4. Строка "* [ Дерево (p) для p в (sdl2.dep_bins + glew.dep_bins + gstreamer.dep_bins)], « будет дополнением к импорту, выполненному в начале кода.

Это решило проблему для меня.

0 голосов
/ 21 июня 2020

Для преобразования вашего файла .py в .exe вы можете использовать модуль cx_freeze . Чтобы установить его, откройте свой cmd и введите pip install cx_freeze после его установки создайте новый файл .py и добавьте приведенный ниже код.

        from cx_Freeze import setup, Executable
        setup(name = "<anyname>",
              version = "<any version>",
              description = "<add description you want>",
              executables = [Executable(r"<give the path where your python file is  
              located> ")]
              )

сохраните этот файл как setup.py или любое имя, которое вы хотите сохранить его и храните в той же папке. Затем в этой папке откройте «открыть командное окно здесь», вы можете сделать это, одновременно нажав клавишу Shift и щелкнув правой кнопкой мыши. Затем в команде введите python setup.py(or the name you have given to new file) build. Он создаст папку сборки, и в этой папке вы найдете файл .exe.

0 голосов
/ 21 июня 2020

Вы можете использовать Auto PY to EXE для преобразования python файла в exe-файлы!

...