pyinstaller打包xgboost项目,得到的可执行文件运行出错问题及解决
作者:Yang TY
文章介绍了使用PyInstaller打包包含XGBoost项目的Python程序时遇到的错误,错误原因是PyInstaller将XGBoost的`sklearn.py`模块误认为是`scikit-learn`库,导致找不到`get_params`函数,解决方法是将`sklearn.py`重命名为`sklearn_xgb.py`,以避免命名冲突
问题描述
用pyinstaller打包xgboost项目,打包过程没有出错,但运行得到的可执行文件时
报出如下错误(直接运行python工程并不会报这个错):
super() has no attribute 'get_params', sklearn.py, line697
原因分析
经排查发现,报错原因是:
pyinstaller的包解析机制不完善,误将xgboost的sklearn.py模块当作sklearn包(即scikit-learn工具包)给封装了起来,
由于get_params是继承自scikit-learn库的一个成员函数,所以才会找不到。
解决方法
对xgboost的sklearn.py文件重命名
例如改为sklearn_xgb.py,消除sklearn包的命名冲突即可。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
