Я хочу упаковать пример приложения 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
.