【问题标题】:error in running exe made by using pyinstaller having sklearn packages and xgboost使用具有 sklearn 包和 xgboost 的 pyinstaller 运行 exe 时出错
【发布时间】:2019-11-18 00:20:27
【问题描述】:

我从一个 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 的 dll 文件时抛出错误但它为 sklearn 抛出错误时,我使用了为 xgboost 添加数据。我已经制作了一个文件的 exe,但该文件通过使用 import 调用其他其他 python 文件函数。

【问题讨论】:

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


    【解决方案1】:

    sklearnxgboost 在与 Pyinstaller 一起使用时需要特别小心。我正在跳过导入 xgboost 但这里有一个有用的 answer 关于将它与 Pyinstaller 一起使用。

    似乎当你添加xgboostPyinstaller 无法处理像scipy 这样的一些模块。一种简单的方法是将 Python 的 sit-package 中的整个 scipy 作为数据添加到您的可执行文件中。所以编辑你的规范文件并在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 生成您的可执行文件。

    【讨论】:

    • 这对我不起作用,我在分析后添加了 'a.datas += Tree('venv/Lib/site-packages/sklearn', prefix='sklearn')' 这一行但得到了同样的错误
    • 现在该错误没有出现,发生了另一个错误致命的 Python 错误:initfsencoding:无法加载文件系统编解码器 ModuleNotFoundError:没有名为“encodings”的模块当前线程 0x00002430(最近一次调用):
    • 您有许多导入模块,它们变得复杂。 sklearnxgboost 现在可以了。将您的代码添加到问题和完整的错误回溯中。
    • import os from datetime import datetime import xgboost import sklearn.ensemble import sklearn.tree import pickle import sklearn.neighbors.typedefs import sklearn.neighbors.quad_tree import sklearn.tree._utils import cython import sklearn import sklearn.utils._cython_blas import numpy as np import joblib from sklearn.preprocessing import StandardScaler
    • 这些是我用过的导入
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2021-04-22
    • 1970-01-01
    • 2019-11-17
    • 2016-12-26
    • 2019-06-16
    • 2019-05-07
    • 2020-02-27
    相关资源
    最近更新 更多