@0tt0max
инженер

Почему испольняемый exe-файл из python скрипта, созданный с pyinstaller, не загружает sklearn модель model.pkl?

Здравствуйте! Есть задача создать исполняемый exe файл из python 3.10.2. Для этого пытаюсь применить auto-py-to-exe 2.19.0 (pyinstallaller 5.0.1 ). Python программа использует для выполнения прогноза предобученную модель sklearn 1.0.2. В процессе компиляции потребовалось добавить некоторые модули (см. ниже), компиляция проходит без ошибок, exe-файл запускается, но в результате работы программы не удается загрузить модель model.pkl. Фрагмент кода ниже.

Команда pyinstaller:
spoiler
pyinstaller --noconfirm --onedir --windowed --add-data "E:/mydocs/desctop_app/configuration.py;." --add-data "E:/mydocs/desctop_app/functions.py;." --add-data "E:/mydocs/desctop_app/iir_filter.py;." --add-data "E:/mydocs/desctop_app/model.pkl;." --hidden-import "sklearn.utils._typedefs" --hidden-import "sklearn.neighbors._partition_nodes"


Фрагмент кода:
import joblib
import logging
import sklearn

clf_model = load_model()
if clf_model == -1:
    logging.error("Не удалось загрузить модель!")
else:
    logging.debug("Загрузка модели.")

def load_model():
    try:
        with open('model.pkl', 'rb') as f:
            clf = joblib.load(f)
        return clf
    except:
        return -1


Изначально в прогамму не импортировал sklearn, думал из-за этого, но импорт sklearn не помог. Буду благодарен за хоть какие-то подсказки. Поиск в интернете дал только это https://github.com/pyinstaller/pyinstaller/issues/5342
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
@0tt0max Автор вопроса
инженер
В общем, разобрался сам. Может быть кому-то пригодится. В своей программе я использовал модели случайного леса, которые импортируются так
from sklearn.ensemble import RandomForestClassifier

Поэтому в скрытом импорте нужно добавить --hidden-import "sklearn.ensemble". В моем случае нужно было выполнить такой импорт: --hidden-import "sklearn.ensemble" --hidden-import "sklearn.utils._typedefs" --hidden-import "sklearn.neighbors._partition_nodes", по двум другим модулям я получал ошибку. А вот про sklearn.ensemble сразу не догадался)))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы