pyinstaller, добавление вложенных модулей в скрытый импорт не работает - PullRequest
1 голос
/ 22 апреля 2020

Я использую pyinstaller для преобразования ".py" сценария в исполняемый файл. Скрипт принимает некоторые параметры CLI, запускает на нем модели scikit-learn и keras и возвращает прогнозы. «.Py» работает нормально, когда выполняется как «python3 Forex.py». Но когда я использую:

pyinstaller --onefile predict.py

Это выдает эту ошибку:

ModuleNotFoundError: No module named 'sklearn.neighbors._typedefs'

Но когда я делаю список pip3, я ясно вижу, что там установлен scikit-learn. После поиска переполнения стека я понял, что у pyinstaller есть проблемы при получении зависимостей второго уровня, и это можно решить, добавив библиотеку в скрытые операции импорта. Я сделал это так:

a = Analysis(['predict.py'],
             pathex=['/Users/mac/Desktop/Fiverr/Clothes_Classification/Scripts'],
             binaries=[],
             datas=[],
             hiddenimports=['sklearn.neighbors._typedefs'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

но та же ошибка все еще там. Модель от Keras дает отличные результаты, но все модели sklearn терпят неудачу. Кроме того, я использую pickle для загрузки моделей sklearn и load_model из keras для загрузки моделей keras.

Я выполняю это так:

./predict "/Users/mac/Desktop/Fiverr/Clothes_Classification/Dataset/Images/5336-0010.jpg" "/Users/mac/Desktop/Fiverr/Clothes_Classification/Scripts/Models/"

, где даны 2 CLI, которые используются sys.argv в программе. Думаю, с ними проблем нет.

Любая помощь будет высоко оценена. Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2020

Файл .spe c должен быть изменен на скрытый импорт typdefs (обратите внимание на отсутствующее подчеркивание) hiddenimports=['sklearn.neighbors.typedefs'],

, а не hiddenimports=['sklearn.neighbors._typedefs'],, как может указывать ошибка

...