Xgboost: импорт в python 2.7 завершается с ошибкой 127 в Win 7

Созданный на 7 мар. 2016  ·  3Комментарии  ·  Источник: dmlc/xgboost

Windows 7, R работает нормально
питон 2.7.10 | EPD 7.5-3 (64-разрядная версия), numpy, scipy, theano и т. д. работает нормально

Шаги:

  • клонированный репозиторий рекурсивно
  • собрать и сделать в основной директории (ошибок не видно, библиотеки libxgboost.dll и libxgboost.a находятся в папке /lib)
  • переключитесь в папку пакета python, вызовите python setup.py install , снова никаких видимых ошибок
  • запустить python, позвонить
    >>>import xgboost
    получить следующее сообщение об ошибке:
  File "<stdin>", line 1, in <module>
  File "xgboost\__init__.py", line 11, in <module>
    from .core import DMatrix, Booster
  File "xgboost\core.py", line 83, in <module>
    _LIB = _load_lib()
  File "xgboost\core.py", line 77, in _load_lib
    lib = ctypes.cdll.LoadLibrary(lib_path[0])
  File "P:\Python\Python27\lib\ctypes\__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "P:\Python\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 127] The specified procedure could not be found

Я взломал core.py, чтобы проверить, какую библиотеку он на самом деле пытается загрузить :)
он на самом деле ищет правильную dll
/Sources/xgb/python-package/xgboost/../../lib/libxgboost.dll
именно там, где он находится, недавно построенный несколько минут назад

Самый полезный комментарий

У меня была такая же ошибка, но исправление оставляет много вопросов без ответа. Первоначально я скомпилировал с помощью minGW, используя более четкие указания .

Оказалось, что по какой-то причине наличие пути mingw в _начале_ системного пути (а не в конце для меня) решило проблему для этой компиляции.

>>> dir = r'C:\Program Files\mingw-w64\x86_64-6.2.0-posix-seh-rt_v5-rev1\mingw64\bin'
>>> import os
>>> os.environ['PATH'].count(dir) # Here I show its already in the path at least once
1
>>> os.environ['PATH'].find(dir) # We see its at the end of my path
1491
>>> os.environ['PATH'] = dir + ';' + os.environ['PATH'] # I put it on the beginning of the path, NOT THE END.
>>> import xgboost # I modified core.py to print the directory of the requested dll. It imports successfully.
C:\Users\Joey\Anaconda2\lib\site-packages\xgboost-0.6-py2.7.egg\xgboost\libxgboost.dll

Это единственный способ, которым это сработало

Обратите внимание, что каталог запрошенной dll одинаков как в случае неудачи, так и в случае успеха, так что это не так. Единственное, что меняется, это размещение каталога mingw/bin в начале переменной пути. Поэтому я считаю, что это может быть проблема с minGW или с тем, как общались minGW и python (здесь я не эксперт).

НАСТОЯЩЕЕ исправление состояло в том, чтобы скомпилировать с помощью Visual Studio, установив cmake (добавьте в свой путь во время установки!), И следуя указаниям визуальной студии (которые действительно должны быть разработаны, не все умеют в этом). Итак, в целом: следуйте инструкциям, используя Git для Windows, клонируйте репозиторий, установите cmake и добавьте «cmake» в свой путь, следуйте инструкциям по установке Visual Studio для сборки с использованием cmake и Visual Studio (установите последнюю версию сообщества Visual Studio, если вы еще не сделали), теперь скопируйте единственную libxgboost.dll в каталог пакетов python, откройте командную строку и теперь «установите python setup.py» из пакетов python.

Примечание. Для установки Visual Studio вам не нужно, чтобы система знала путь к minGW.

Все 3 Комментарий

  1. Как вы строите xgboost?

    вы должны следовать этому:
    http://xgboost.readthedocs.io/en/latest/build.html#building — на окнах

  2. затем установите пакет python

У меня была точно такая же ошибка с вами.
Попробуйте удалить другую версию Python на вашем компьютере и перезагрузите компьютер. Я знаю, что это не очень хорошее решение, но оно работает для меня.

У меня была такая же ошибка, но исправление оставляет много вопросов без ответа. Первоначально я скомпилировал с помощью minGW, используя более четкие указания .

Оказалось, что по какой-то причине наличие пути mingw в _начале_ системного пути (а не в конце для меня) решило проблему для этой компиляции.

>>> dir = r'C:\Program Files\mingw-w64\x86_64-6.2.0-posix-seh-rt_v5-rev1\mingw64\bin'
>>> import os
>>> os.environ['PATH'].count(dir) # Here I show its already in the path at least once
1
>>> os.environ['PATH'].find(dir) # We see its at the end of my path
1491
>>> os.environ['PATH'] = dir + ';' + os.environ['PATH'] # I put it on the beginning of the path, NOT THE END.
>>> import xgboost # I modified core.py to print the directory of the requested dll. It imports successfully.
C:\Users\Joey\Anaconda2\lib\site-packages\xgboost-0.6-py2.7.egg\xgboost\libxgboost.dll

Это единственный способ, которым это сработало

Обратите внимание, что каталог запрошенной dll одинаков как в случае неудачи, так и в случае успеха, так что это не так. Единственное, что меняется, это размещение каталога mingw/bin в начале переменной пути. Поэтому я считаю, что это может быть проблема с minGW или с тем, как общались minGW и python (здесь я не эксперт).

НАСТОЯЩЕЕ исправление состояло в том, чтобы скомпилировать с помощью Visual Studio, установив cmake (добавьте в свой путь во время установки!), И следуя указаниям визуальной студии (которые действительно должны быть разработаны, не все умеют в этом). Итак, в целом: следуйте инструкциям, используя Git для Windows, клонируйте репозиторий, установите cmake и добавьте «cmake» в свой путь, следуйте инструкциям по установке Visual Studio для сборки с использованием cmake и Visual Studio (установите последнюю версию сообщества Visual Studio, если вы еще не сделали), теперь скопируйте единственную libxgboost.dll в каталог пакетов python, откройте командную строку и теперь «установите python setup.py» из пакетов python.

Примечание. Для установки Visual Studio вам не нужно, чтобы система знала путь к minGW.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги