使用 pyinstaller 在 运行 具有 xgboost 包的 exe 文件中出错

Error in running exe file having xgboost package by using pyinstaller

我有一个用于预测某些值的代码,它在代码中使用了 xgboost 包。当我 运行 它在 PyCharm 时,它 运行 如预期的那样。

问题出在我使用 pyinstaller 制作可执行文件时。它将使 exe 没有任何错误,但是当我 运行 它引发以下错误:

  Traceback (most recent call last):
   File "test_fraud.py", line 3, in <module>
   import xgboost
   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
   File "<frozen importlib._bootstrap>", line 967, in 
   _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
   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\xgboost\__init__.py", line 11, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in 
  _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  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\xgboost\core.py", line 161, in <module>
  File "lib\site-packages\xgboost\core.py", line 123, in _load_lib
  File "lib\site-packages\xgboost\libpath.py", line 48, in find_lib_path
  xgboost.libpath.XGBoostLibraryNotFound: Cannot find XGBoost Library in 
  the candidate path, did you install compilers and run build.sh in root 
  path?
  List of candidates:
  C:\Users\SHUBHA~1\AppData\Local\Temp\_MEI11402\xgboost\xgboost.dll
  C:\Users\SHUBHA~1\AppData\Local\Temp\_MEI11402\xgboost
  \../../lib/xgboost.dll
 C:\Users\SHUBHA~1\AppData\Local\Temp\_MEI11402\xgboost\./lib/xgboost.dll
  C:\Users\SHUBHA~1\AppData\Local\Temp\_MEI11402\xgboost\xgboost.dll
 C:\Users\SHUBHA~1\AppData\Local\Temp\_MEI11402\xgboost
 \../../windows/x64/Release/xgboost.dll
   C:\Users\SHUBHA~1\AppData\Local\Temp\_MEI11402\
  xgboost\./windows/x64/Release/xgboost.dll
 [6564] Failed to execute script test_fraud

这是怎么回事?

Pyinstaller 似乎找不到 xgboost.dllVERSION 文件。所以你需要手动将它们添加到你的输出包中。我还建议您使用 try/except 块来查看发生了什么。 假设这个简单的例子:

import traceback
try:
    import xgboost
    input("xgboost imported successfully!")
except Exception:
    traceback.print_exc()
    input("Import Error!")

我建议您使用 env 构建脚本,因此您需要添加位于 <path_to_venv>/xgboostxgboost 目录和位于 [=] 的 VERSION 文件19=]。接下来,使用 pyinstaller 将它们添加为 data-file。启动你的环境并执行以下命令(我的 virtualenv 命名为 env):

├───myscript.py
├───env

命令:

(env) > pyinstaller myscript.py -F --add-data "./env/xgboost/*;xgboost/" --add-data "./env/Lib/site-packages/xgboost/VERSION;xgboost/"