Проблема с pyinstaller - "ModuleNotFoundError'"
Написал код, который корректно работает. Однако при создании .exe с помощью auto-py-to-exe и запуске получил ошибку:
ModuleNotFoundError: No module named 'pystray'
При этом модуль pystray установлен. Для обхода ошибки пересобрал exe-файл с помощью pyinstaller. Проблема решилась, и файл запускается корректно. Однако теперь возникла новая трудность — при запуске .exe программа стартует с задержкой в 3-4 секунды, в то время как исходный .py открывается мгновенно.
Как можно ускорить запуск .exe и устранить задержку?
Ответы (1 шт):
Код с которым я вам недавно помогал у меня прекрасно собирается через auto-py-to-exe
. Скорее всего проблема в вашем виртуальном окружении.
То что .exe
запускается 3-4 секунды, это вполне нормальная история, ведь вы получаете не настоящий .exe, а самораспаковывающийся архив. Соответственно на его распаковку уходит время и только после этого запускается сам скрипт.
Если собрать через pyinstaller данный код, то можно будет в этом наглядно убедиться:
import sys
import os
print(getattr(sys, '_MEIPASS', os.getcwd()))
input()
Вывод:
C:\Users\Amgarak\AppData\Local\Temp\_MEI67962 # Путь может отличаться
Нам распечатало путь к временному каталогу, откуда на самом деле и будет запускаться интерпретатор Python с вашим скриптом. Так же там будут находиться и все добавленные в сборку файлы\библиотеки.
Чем больше тяжелых файлов\библиотек добавить в сборку, тем дольше будет происходить процесс распаковки. Соответственно и время запуска будет увеличено.
Если для вас критично, что программа стартует не сразу, предлагаю рассмотреть вариант с Nuitka. Данный компилятор уже соберёт вам полноценный .exe
файл, так как транслирует модули Python в программу уровня C.
pip install Nuitka
Пример команды для компиляции:
nuitka --windows-disable-console h14.py