Xgboost: l'importation en python 2.7 échoue avec l'erreur 127 dans Win 7

Créé le 7 mars 2016  ·  3Commentaires  ·  Source: dmlc/xgboost

Windows 7, R fonctionne bien
Python 2.7.10 | EPD 7.5-3 (64 bits), numpy, scipy, theano etc fonctionne bien

Pas:

  • dépôt cloné récursivement
  • build et make dans le répertoire principal (aucune erreur visible, les bibliothèques libxgboost.dll et libxgboost.a sont dans le dossier /lib)
  • passez au dossier python-package, appelez python setup.py install , encore une fois aucune erreur visible
  • démarrer python, appeler
    >>>import xgboost
    obtenez le message d'erreur suivant :
  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

J'ai piraté core.py pour vérifier quelle bibliothèque il essaie réellement de charger :)
il recherche en fait la bonne dll
/Sources/xgb/python-package/xgboost/../../lib/libxgboost.dll
qui est exactement là où il se trouve, fraîchement construit il y a quelques minutes

Commentaire le plus utile

J'ai eu la même erreur, mais le correctif laisse de nombreuses questions sans réponse. J'ai initialement compilé avec minGW en utilisant des instructions plus claires .

Il s'est avéré que, pour une raison quelconque, le fait d'avoir le chemin mingw au _début_ du chemin système (plutôt que la fin pour moi) a résolu le problème pour cette compilation.

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

C'est la seule façon dont cela a fonctionné

Veuillez noter que le répertoire de la dll demandée est le même dans le cas d'échec et de réussite, donc ce n'est pas ça. La seule chose qui change est de placer le répertoire mingw/bin au début de la variable path. Par conséquent, je pense que cela pourrait être un problème avec minGW ou comment minGW et python communiquaient (pas un expert ici).

Le vrai correctif consistait à compiler à l'aide de Visual Studio, en installant cmake (ajoutez-le à votre chemin lors de l'installation !) et en suivant les instructions de Visual Studio (qui doivent vraiment être élaborées, tout le monde n'est pas un magicien dans ce domaine). Donc au total : suivez les instructions à l'aide de Git pour Windows, clonez le référentiel, installez cmake et ajoutez « cmake » à votre chemin, suivez les instructions d'installation de visual studio pour créer à l'aide de cmake et de visual studio (installez la dernière édition de la communauté de visual studio si vous pas déjà), copiez maintenant le seul libxgboost.dll dans votre répertoire python-packages, ouvrez une invite de commande, et maintenant "python setup.py install" à partir de python-packages.

Remarque pour les installations de Visual Studio, vous n'avez pas besoin que le système connaisse le chemin de minGW.

Tous les 3 commentaires

  1. Comment construisez-vous le xgboost ?

    vous devriez suivre ceci:
    http://xgboost.readthedocs.io/en/latest/build.html#building-on-windows

  2. puis installez le package python

J'ai eu exactement la même erreur avec vous.
Essayez de désinstaller une autre version de Python sur votre machine et redémarrez. Je sais que ce n'est pas une bonne solution, mais cela fonctionne pour moi.

J'ai eu la même erreur, mais le correctif laisse de nombreuses questions sans réponse. J'ai initialement compilé avec minGW en utilisant des instructions plus claires .

Il s'est avéré que, pour une raison quelconque, le fait d'avoir le chemin mingw au _début_ du chemin système (plutôt que la fin pour moi) a résolu le problème pour cette compilation.

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

C'est la seule façon dont cela a fonctionné

Veuillez noter que le répertoire de la dll demandée est le même dans le cas d'échec et de réussite, donc ce n'est pas ça. La seule chose qui change est de placer le répertoire mingw/bin au début de la variable path. Par conséquent, je pense que cela pourrait être un problème avec minGW ou comment minGW et python communiquaient (pas un expert ici).

Le vrai correctif consistait à compiler à l'aide de Visual Studio, en installant cmake (ajoutez-le à votre chemin lors de l'installation !) et en suivant les instructions de Visual Studio (qui doivent vraiment être élaborées, tout le monde n'est pas un magicien dans ce domaine). Donc au total : suivez les instructions à l'aide de Git pour Windows, clonez le référentiel, installez cmake et ajoutez « cmake » à votre chemin, suivez les instructions d'installation de visual studio pour créer à l'aide de cmake et de visual studio (installez la dernière édition de la communauté de visual studio si vous pas déjà), copiez maintenant le seul libxgboost.dll dans votre répertoire python-packages, ouvrez une invite de commande, et maintenant "python setup.py install" à partir de python-packages.

Remarque pour les installations de Visual Studio, vous n'avez pas besoin que le système connaisse le chemin de minGW.

Cette page vous a été utile?
0 / 5 - 0 notes