Xgboost: importação em python 2.7 falha com erro 127 no Win 7

Criado em 7 mar. 2016  ·  3Comentários  ·  Fonte: dmlc/xgboost

Windows 7, R funciona bem
python 2.7.10 | EPD 7.5-3 (64 bits), numpy, scipy, theano etc funciona bem

Degraus:

  • repositório clonado recursivamente
  • build e make no diretório principal (sem erros visíveis, as bibliotecas libxgboost.dll e libxgboost.a estão na pasta /lib)
  • mude para a pasta python-package, chame python setup.py install , novamente sem erros visíveis
  • inicie python, ligue
    >>>import xgboost
    obter a seguinte mensagem de erro:
  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

Eu hackeei o core.py para verificar qual biblioteca ele realmente tenta carregar :)
ele realmente procura a dll certa
/Sources/xgb/python-package/xgboost/../../lib/libxgboost.dll
que é exatamente onde está localizado, recém-construído há alguns minutos

Comentários muito úteis

Eu tive o mesmo erro, mas a correção deixa muitas perguntas sem resposta. Eu originalmente compilei com minGW usando algumas instruções mais claras .

Acontece que, por qualquer motivo, ter o caminho mingw no _início_ do caminho do sistema (em vez de terminar para mim) resolveu o problema dessa compilação.

>>> 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 é a única maneira que funcionou

Observe que o diretório da dll solicitada é o mesmo no caso de falha e sucesso, portanto, não é isso. A única coisa que muda é colocar o diretório mingw/bin no início da variável de caminho. Portanto, acredito que possa ser um problema com o minGW ou como o minGW e o python estavam se comunicando (não um especialista aqui).

A correção REAL foi compilar usando o Visual Studio, instalando o cmake (adicione ao seu caminho durante a instalação!) Portanto, no total: siga as instruções usando o Git para Windows, clone o repositório, instale o cmake e adicione 'cmake' ao seu caminho, siga as instruções de instalação do visual studio para criar usando cmake e visual studio (instale a edição mais recente da comunidade do visual studio se você ainda não o fiz), agora copie o único libxgboost.dll para o diretório python-packages, abra um prompt de comando e agora "python setup.py install" de python-packages.

Observação para instalações do Visual Studio, você não precisa que o sistema conheça o caminho do minGW.

Todos 3 comentários

  1. Como você constrói o xgboost?

    você deve seguir isso:
    http://xgboost.readthedocs.io/en/latest/build.html#building -on-windows

  2. em seguida, instale o pacote python

Eu tive exatamente o mesmo erro com você.
Tente desinstalar outra versão do Python em sua máquina e reinicie. Eu sei que esta não é uma boa solução, mas funciona para mim.

Eu tive o mesmo erro, mas a correção deixa muitas perguntas sem resposta. Eu originalmente compilei com minGW usando algumas instruções mais claras .

Acontece que, por qualquer motivo, ter o caminho mingw no _início_ do caminho do sistema (em vez de terminar para mim) resolveu o problema dessa compilação.

>>> 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 é a única maneira que funcionou

Observe que o diretório da dll solicitada é o mesmo no caso de falha e sucesso, portanto, não é isso. A única coisa que muda é colocar o diretório mingw/bin no início da variável de caminho. Portanto, acredito que possa ser um problema com o minGW ou como o minGW e o python estavam se comunicando (não um especialista aqui).

A correção REAL foi compilar usando o Visual Studio, instalando o cmake (adicione ao seu caminho durante a instalação!) Portanto, no total: siga as instruções usando o Git para Windows, clone o repositório, instale o cmake e adicione 'cmake' ao seu caminho, siga as instruções de instalação do visual studio para criar usando cmake e visual studio (instale a edição mais recente da comunidade do visual studio se você ainda não o fiz), agora copie o único libxgboost.dll para o diretório python-packages, abra um prompt de comando e agora "python setup.py install" de python-packages.

Observação para instalações do Visual Studio, você não precisa que o sistema conheça o caminho do minGW.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

pplonski picture pplonski  ·  3Comentários

matthewmav picture matthewmav  ·  3Comentários

hx364 picture hx364  ·  3Comentários

uasthana15 picture uasthana15  ·  4Comentários

FabHan picture FabHan  ·  4Comentários