Windows将xgboost导入Anaconda时报错126

Windows Error 126 when importing xgboost into Anaconda

虽然我已经使用 Python 一段时间了,但我对 Anaconda 比较陌生,一般的包处理似乎给我带来了很多问题。

我正在尝试启动 xgboost 和 运行 Anaconda。我最终设法使用以下命令安装它:

conda install -c anaconda py-xgboost

在 Anaconda 提示中。

当我现在在 PyCharm Python 控制台中尝试 import xgboost 时,出现以下错误:

Python 2.7.15 |Anaconda 2.5.0 (64-bit)| (default, May  1 2018, 18:37:09) [MSC v.1500 64 bit (AMD64)] on win32

Backend Qt5Agg is interactive backend. Turning interactive mode on.
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 5.0.4\helpers\pydev\pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "C:\Users\Richard\Anaconda2\lib\site-packages\xgboost\__init__.py", line 11, in <module>
    from .core import DMatrix, Booster
  File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 5.0.4\helpers\pydev\pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "C:\Users\Richard\Anaconda2\lib\site-packages\xgboost\core.py", line 115, in <module>
    _LIB = _load_lib()
  File "C:\Users\Richard\Anaconda2\lib\site-packages\xgboost\core.py", line 109, in _load_lib
    lib = ctypes.cdll.LoadLibrary(lib_path[0])
  File "C:\Users\Richard\Anaconda2\lib\ctypes\__init__.py", line 444, in LoadLibrary
    return self._dlltype(name)
  File "C:\Users\Richard\Anaconda2\lib\ctypes\__init__.py", line 366, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

我已经在 Whosebug 上搜索过类似的问题,但除了找到复杂的答案之外,我没有运气,我觉得在没有完全理解的情况下实施这些答案很不舒服,而且我不确定它是否适用于我的场景。

一些需要注意的事项,可能相关:

任何人都可以阐明导致此问题的原因吗?这是我关于堆栈溢出的第一个问题,如果我的问题没有按照指南完全正确地提出,我深表歉意。

经过进一步搜索,我设法回答了我自己的问题。

必须先编译和构建 xgboost (C++) 库,然后才能将其用作 Python 模块。为此,我仔细按照此页面上的说明进行操作:

https://www.ibm.com/developerworks/community/blogs/jfp/entry/Installing_XGBoost_For_Anaconda_on_Windows?lang=en

现在,我认为 xgboost 运行良好。这是我第一次遇到需要这样做的包,因此感到困惑。希望这对遇到同样问题的其他人有所帮助。