Упаковка приложения Kivy на OS X с PyInstaller возвращает FileNotFoundError - PullRequest
0 голосов
/ 25 января 2020

Я хочу упаковать пример приложения Kivy touchtracer для OS X в исполняемый файл, используя PyInstaller & Homebrew, следуя официальной документации . Я установил все зависимости, используя brew без проблем.
Я запустил следующий код для упаковки исходных файлов (так же, как в документации):

pyinstaller -y --clean --windowed --name touchtracer \
  --exclude-module _tkinter \
  --exclude-module Tkinter \
  --exclude-module enchant \
  --exclude-module twisted \
  /usr/local/share/kivy-examples/demo/touchtracer/main.py

И он показывает две критические ошибки во время упаковки:

[CRITICAL] [Spelling    ] Unable to find any valuable Spelling provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
enchant - ModuleNotFoundError: No module named 'enchant'
  File "/Users/XXX/opt/miniconda3/lib/python3.7/site-packages/kivy/core/__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)
  File "/Users/XXX/opt/miniconda3/lib/python3.7/site-packages/kivy/core/spelling/spelling_enchant.py", line 12, in <module>
    import enchant

osxappkit - ModuleNotFoundError: No module named 'AppKit'
  File "/Users/XXX/opt/miniconda3/lib/python3.7/site-packages/kivy/core/__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)
  File "/Users/XXX/opt/miniconda3/lib/python3.7/site-packages/kivy/core/spelling/spelling_osxappkit.py", line 16, in <module>
    from AppKit import NSSpellChecker, NSMakeRange

Несмотря на эти ошибки, в каталоге dist создается исполняемый файл touchtracer.app, который прекрасно работает при его запуске.
Затем я редактирую touchtracer.spec и добавляю Tree('/Users/XXX/opt/miniconda3/share/kivy-examples/demo/touchtracer/') для поиска дополнительных файлов в каталоге.

Но когда я собираю файл spe c с pyinstaller -y --clean --windowed touchtracer.spec, в конце выдается ошибка:

FileNotFoundError: [Errno 2] No such file or directory: '/Users/XXX/opt/miniconda3/share/kivy-examples/demo/touchtracer/dist/touchtracer.app/Contents/Resources/kivy_install/data/style.kv'
28758 WARNING: stderr: FileNotFoundError: [Errno 2] No such file or directory: '/Users/XXX/opt/miniconda3/share/kivy-examples/demo/touchtracer/dist/touchtracer.app/Contents/Resources/kivy_install/data/style.kv'

И когда я запускаю touchtracer.app внутри dist выдается следующая ошибка:

LSOpenURLsWithRole() failed with error -10810 for the file /Users/XXX/opt/miniconda3/share/kivy-examples/demo/touchtracer/dist/touchtracer.app.

touchtracer.spec файл:

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

block_cipher = None


a = Analysis(['/Users/mrk/opt/miniconda3/share/kivy-examples/demo/touchtracer/main.py'],
             pathex=['/Users/mrk/opt/miniconda3/share/kivy-examples/demo/touchtracer'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=['_tkinter', 'Tkinter', 'enchant', 'twisted'],
             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='touchtracer',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False )
coll = COLLECT(exe, Tree('/Users/mrk/opt/miniconda3/share/kivy-examples/demo/touchtracer/'),
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='touchtracer')
app = BUNDLE(coll,
             name='touchtracer.app',
             icon=None,
             bundle_identifier=None)

Я пытался

  • добавить необходимые файлы в datas, но выдает ту же ошибку.
  • упаковывает другие приложения kivy (некоторые из них не выдают эту ошибку, но сразу же выходит из приложения)
  • импортирует зависимости внутри программы c

Я бегу Python 3.7.14 и Kivy v1.11.1.

...