ошибка при запуске exe из-за использования pyinstaller с пакетами sklearn и xgboost - PullRequest
0 голосов
/ 08 июля 2019

Я сделал exe-файл из файла python, который имеет множественный импорт из наших собственных файлов и имеет пакеты sklearn, xgboost, pandas и другие пакеты sklaern. во время подготовки exe-файла нет ошибок, при запуске он выдает ошибку

Traceback (most recent call last):
File "probability_score_engine.py", line 16, in <module>
import sklearn.ensemble
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\sklearn\__init__.py", line 76, in <module>
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\sklearn\base.py", line 16, in <module>
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\sklearn\utils\__init__.py", line 20, in <module>
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\sklearn\utils\validation.py", line 21, in 
<module>
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\sklearn\utils\fixes.py", line 18, in <module>
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\scipy\sparse\linalg\__init__.py", line 113, in 
<module>
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, 
in <module>
File "C:\Users\ShubhamSingh\PycharmProjects\cfna_scoring\venv\lib\site- 
packages\PyInstaller\loader\pyimod03_importers.py", line 627, in 
exec_module
exec(bytecode, module.__dict__)
File "lib\site-packages\scipy\sparse\linalg\isolve\iterative.py", line 10, 
in <module>
ImportError: DLL load failed: The specified module could not be found.
[10668] Failed to execute script probability_score_engine

Я использую add data для xgboost, когда выдает ошибку, когда не находит dll-файлы для xgboost, но выдает ошибку для sklearn. Я сделал exe-файл из одного файла, но этот файл вызывает другие функции Python-файлов с помощью импорта.

1 Ответ

0 голосов
/ 08 июля 2019

И sklearn, и xgboost требуют особого внимания при использовании с Pyinstaller. Я пропускаю импорт xgboost, но вот полезный ответ об использовании его с Pyinstaller.

Кажется, что при добавлении xgboost Pyinstaller не может обрабатывать некоторые модули, такие как scipy. Простой подход заключается в добавлении всего scipy в Python sit-package к вашему исполняемому файлу в качестве данных. Так что отредактируйте свой файл спецификации и добавьте его после Analysis:

# -*- mode: python -*-

block_cipher = None


a = Analysis(
datas=[('./env/xgboost/*', 'xgboost/'), ('./env/Lib/site-packages/xgboost/VERSION', 'xgboost/')],
    ...
)
# add here
a.datas += Tree('<path_to_scipy_in_python_dir>', prefix='scipy')
...
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

И, наконец, сгенерируйте свой исполняемый файл с помощью pyinstaller script.spec.

...