Проблема с pyinstaller - "ModuleNotFoundError'"

Написал код, который корректно работает. Однако при создании .exe с помощью auto-py-to-exe и запуске получил ошибку:

ModuleNotFoundError: No module named 'pystray'

При этом модуль pystray установлен. Для обхода ошибки пересобрал exe-файл с помощью pyinstaller. Проблема решилась, и файл запускается корректно. Однако теперь возникла новая трудность — при запуске .exe программа стартует с задержкой в 3-4 секунды, в то время как исходный .py открывается мгновенно.

Как можно ускорить запуск .exe и устранить задержку?


Ответы (1 шт):

Автор решения: Amgarak

Код с которым я вам недавно помогал у меня прекрасно собирается через 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

→ Ссылка