Xgboost: la importación en python 2.7 falla con el error 127 en Win 7

Creado en 7 mar. 2016  ·  3Comentarios  ·  Fuente: dmlc/xgboost

Windows 7, R funciona bien
pitón 2.7.10 | EPD 7.5-3 (64 bits), numpy, scipy, theano, etc. funciona bien

Pasos:

  • repositorio clonado recursivamente
  • construir y hacer en el directorio principal (sin errores visibles, las bibliotecas libxgboost.dll y libxgboost.a están en la carpeta /lib)
  • cambie a la carpeta python-package, llame a python setup.py install , nuevamente sin errores visibles
  • iniciar python, llamar
    >>>import xgboost
    obtener el siguiente mensaje de error:
  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

Hackeé core.py para verificar qué biblioteca realmente intenta cargar :)
en realidad busca el dll correcto
/Sources/xgb/python-package/xgboost/../../lib/libxgboost.dll
que es exactamente donde se encuentra, recién construido hace unos minutos

Comentario más útil

Tuve el mismo error, pero la solución deja muchas preguntas sin respuesta. Originalmente compilé con minGW usando algunas instrucciones más claras .

Resultó que, por alguna razón, tener la ruta mingw al _comienzo_ de la ruta del sistema (en lugar de al final para mí) resolvió el problema de esa compilación.

>>> 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

Esta es la única forma en que funcionó

Tenga en cuenta que el directorio de la dll solicitada es el mismo tanto en el caso de falla como en el de éxito, por lo que no es eso. Lo único que cambia es colocar el directorio mingw/bin al comienzo de la variable de ruta. Por lo tanto, creo que podría ser un problema con minGW o cómo se comunicaban minGW y python (no soy un experto aquí).

La solución REAL fue compilar usando Visual Studio, instalando cmake (¡agregue a su ruta durante la instalación!) y siguiendo las instrucciones de Visual Studio (que realmente necesitan ser elaboradas, no todos son expertos en estas cosas). Entonces, en total: siga las instrucciones usando Git para Windows, clone el repositorio, instale cmake y agregue 'cmake' a su ruta, siga las instrucciones de instalación de Visual Studio para compilar usando cmake y Visual Studio (instale la última edición comunitaria de Visual Studio si aún no lo ha hecho), ahora copie el único libxgboost.dll en su directorio de paquetes de python, abra un símbolo del sistema y ahora "instalar python setup.py" desde paquetes de python.

Tenga en cuenta que para las instalaciones de Visual Studio no necesita que el sistema conozca la ruta de minGW.

Todos 3 comentarios

  1. ¿Cómo construyes el xgboost?

    deberías seguir esto:
    http://xgboost.readthedocs.io/en/latest/build.html#construcción en Windows

  2. luego instale el paquete python

Tuve exactamente el mismo error contigo.
Intente desinstalar otra versión de Python en su máquina y reinicie. Sé que esta no es una buena solución, pero funciona para mí.

Tuve el mismo error, pero la solución deja muchas preguntas sin respuesta. Originalmente compilé con minGW usando algunas instrucciones más claras .

Resultó que, por alguna razón, tener la ruta mingw al _comienzo_ de la ruta del sistema (en lugar de al final para mí) resolvió el problema de esa compilación.

>>> 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

Esta es la única forma en que funcionó

Tenga en cuenta que el directorio de la dll solicitada es el mismo tanto en el caso de falla como en el de éxito, por lo que no es eso. Lo único que cambia es colocar el directorio mingw/bin al comienzo de la variable de ruta. Por lo tanto, creo que podría ser un problema con minGW o cómo se comunicaban minGW y python (no soy un experto aquí).

La solución REAL fue compilar usando Visual Studio, instalando cmake (¡agregue a su ruta durante la instalación!) y siguiendo las instrucciones de Visual Studio (que realmente necesitan ser elaboradas, no todos son expertos en estas cosas). Entonces, en total: siga las instrucciones usando Git para Windows, clone el repositorio, instale cmake y agregue 'cmake' a su ruta, siga las instrucciones de instalación de Visual Studio para compilar usando cmake y Visual Studio (instale la última edición comunitaria de Visual Studio si aún no lo ha hecho), ahora copie el único libxgboost.dll en su directorio de paquetes de python, abra un símbolo del sistema y ahora "instalar python setup.py" desde paquetes de python.

Tenga en cuenta que para las instalaciones de Visual Studio no necesita que el sistema conozca la ruta de minGW.

¿Fue útil esta página
0 / 5 - 0 calificaciones