使用具有sklearn软件包和xgboost的pyinstaller生成的运行exe错误

时间:2019-07-08 13:11:44

标签: python-3.x dll scikit-learn pyinstaller

我从python文件制作了一个exe文件,该文件从我们自己的文件中多次导入,并包含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

我为xgboost使用添加数据时,它为找不到xgboost的dll文件而引发错误,但是却为sklearn引发了错误。我制作了一个文件的exe文件,但是该文件通过使用import调用了其他python文件功能。

1 个答案:

答案 0 :(得分:0)

与Pyinstaller一起使用时,sklearnxgboost都需要特别注意。我跳过了导入xgboost的操作,但这是关于将其与Pyinstaller一起使用的有用的answer

似乎您添加xgboost时,Pyinstaller无法处理某些模块,例如scipy。一种简单的方法是将Python scipy中的整个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生成可执行文件。