Я боролся с PyInstaller на прошлой неделе, пытаясь собрать мое приложение в один исполняемый файл.
Я пробовал несколько разных реализаций с файлом .spec, и из множества методов, которые я пробую, я могу либо заставить его скомпилироваться в один исполняемый файл, который сразу падает при запуске, вообще не запускается, либо работает, но очень медленно. Ничто по сравнению с тем, когда я запускаю его из PyCharm.
Я не уверен, что медленная скорость запуска вызвана компилятором или чем-то, но выполнение задачи занимает примерно 1-2 секунды, когда я запускаю ее через PyCharm, однако, когда она запускается из исполняемого файла, она занимает около 30-35 секунд, и приложение зависает.
Мое приложение по существу берет некоторый текст из блоков TextInput, извлекает из них текстовые значения, выполняет некоторые SQL-запросы, а затем отправляет необходимую информацию для обновления / добавления информации о входе в базу данных доступа.
Мой последний файл .spec выглядит следующим образом:
# -*- mode: python -*-
import pyodbc
from datetime import date
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.lang import Builder
from kivy.properties import BooleanProperty, ObjectProperty
from kivy.deps import sdl2, glew
block_cipher = None
a = Analysis(['DBInterfaceAssistant.py'],
pathex=['C:\\Python36-32'],
binaries=[],
datas=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='DBInterfaceAssistant',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False )
Продуктом этого приложения является приложение, которое не запускается, оно пытается загрузить приложение, но сразу падает.
--- EDIT ---
Мой текущий скрипт сборки выглядит следующим образом:
# -*- mode: python -*-
import pyodbc
from datetime import date
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.lang import Builder
from kivy.properties import BooleanProperty, ObjectProperty
from kivy.deps import sdl2, glew
from kivy.tools.packaging.pyinstaller_hooks import get_deps_minimal, get_deps_all, hookspath, runtime_hooks
block_cipher = None
a = Analysis(['DBInterfaceAssistant.py'],
pathex=['C:\\Python36-32'],
binaries=[],
datas=[],
hookspath=hookspath(),
runtime_hooks=runtime_hooks(),
** get_deps_all())
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='DBInterfaceAssistant',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False )