Xgboost: libpath['find_lib_path']() renvoie le chemin absolu de libxgboost.dll sous Windows ; l'installation de configuration échoue

Créé le 7 déc. 2016  ·  3Commentaires  ·  Source: dmlc/xgboost

Informations sur l'environnement

Système d'exploitation : Windows 7

Compilateur : MSVC++ 12 (Visual Studio 2013)

Package utilisé (python/R/jvm/C++) : Python 3.4.4

xgboost version utilisée : 0.6

Si vous installez à partir de la source, veuillez fournir

  1. Le hachage de validation ( git rev-parse HEAD ): e7fbc8591fa7277ee4c474b7371c48c11b34cbde
  2. Journaux :
Install libxgboost from: ['C:\\Python34\\XGBoost\\python-package\\xgboost\\../..
/lib/libxgboost.dll']
running install
running bdist_egg
running egg_info
writing requirements to xgboost.egg-info\requires.txt
writing xgboost.egg-info\PKG-INFO
writing dependency_links to xgboost.egg-info\dependency_links.txt
writing top-level names to xgboost.egg-info\top_level.txt
reading manifest file 'xgboost.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*' under directory 'xgboost\include'
warning: no files found matching '*' under directory 'xgboost\src'
warning: no files found matching '*' under directory 'xgboost\make'
warning: no files found matching '*' under directory 'xgboost\rabit'
warning: no files found matching '*' under directory 'xgboost\lib'
warning: no files found matching '*' under directory 'xgboost\dmlc-core'
warning: no previously-included files matching '*.o' found anywhere in distribution
warning: no previously-included files matching '*.a' found anywhere in distribution
warning: no previously-included files matching '*.pyo' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
writing manifest file 'xgboost.egg-info\SOURCES.txt'
installing library code to build\bdist.win-amd64\egg
running install_lib
running build_py
error: Error: setup script specifies an absolute path:

    C:\Python34\XGBoost\python-package\xgboost\..\..\lib\libxgboost.dll

setup() arguments must *always* be /-separated paths relative to the
setup.py directory, *never* absolute paths.

Si vous utilisez un package python, veuillez fournir

  1. La version et la distribution de python - 3.4.4 version officielle pour Win64
  2. La commande pour installer xgboost si vous n'installez pas à partir des sources - python.exe setup.py install (via setuptools)

Étapes à reproduire

  1. Télécharger le code source de xgboost depuis github
  2. mkdir build && cd build && cmake .. -G"Visual Studio 12 2013 Win64"
  3. Ouvrez xgboost.sln avec VS2013 et créez toutes les solutions avec la configuration Release, pour la plate-forme x64. Vous obtiendrez la bibliothèque lib/libxgboost.dll.
  4. cd ..python-package && python.exe setup.py install

Qu'as-tu essayé?

  1. Remplacez le chemin du fichier dans le fichier SOURCES.txt - cela n'a aucun effet, car ce fichier est écrasé à chaque fois
  2. Modifiez python-package/MANIFEST.in et excluez le répertoire lib - cela n'a aucun effet, car il n'y a pas de règle pour le fichier .dll
  3. Remplacez python-package/setup.py, ligne 19
    LIB_PATH = libpath['find_lib_path']()
    à
    LIB_PATH = ['../lib/libxgboost.dll']
    C'était la solution.
    Soit dit en passant, c'est un problème, et l'équipe XGBoost résoudra peut-être ce problème de manière appropriée.

Commentaire le plus utile

J'ai également rencontré cette erreur dans centos 6.5 64. Je recherche des solutions et décide de modifier le python-package/setup.py.
Il suffit de définir le 38e "include_package_data=False" puis d'exécuter "python setup.py install" avec succès. Enfin, "import xgboost as xgb" est correct. Cependant, je lance la démo, j'ai à nouveau rencontré des erreurs.

Enfin, je nettoie les fichiers puis reconstruis à nouveau le xgboost. Exécuter l'installation de python et maintenant c'est bon !


31/12/2016 :
lorsque j'installe xgboost dans centos 7 x86_64, j'ai à nouveau rencontré cette erreur. Cependant, j'ai recompilé le xgboost et je n'ai pas réussi à installer python.
J'essaie de compiler make ou cmake, ils sont tous les deux ok. Mais lorsque j'installe python et que je rencontre la même erreur.
Je me demande juste pourquoi ce n'est pas bon dans centos 7, juste à cause de la version.

Tous les 3 commentaires

J'ai également rencontré cette erreur dans centos 6.5 64. Je recherche des solutions et décide de modifier le python-package/setup.py.
Il suffit de définir le 38e "include_package_data=False" puis d'exécuter "python setup.py install" avec succès. Enfin, "import xgboost as xgb" est correct. Cependant, je lance la démo, j'ai à nouveau rencontré des erreurs.

Enfin, je nettoie les fichiers puis reconstruis à nouveau le xgboost. Exécuter l'installation de python et maintenant c'est bon !


31/12/2016 :
lorsque j'installe xgboost dans centos 7 x86_64, j'ai à nouveau rencontré cette erreur. Cependant, j'ai recompilé le xgboost et je n'ai pas réussi à installer python.
J'essaie de compiler make ou cmake, ils sont tous les deux ok. Mais lorsque j'installe python et que je rencontre la même erreur.
Je me demande juste pourquoi ce n'est pas bon dans centos 7, juste à cause de la version.

@anddelu include_package_data=False est un must car il utilise MANIFEST.in pour la maintenance du paquet et cela n'affecte que l'installation, pas le chemin. Je pense que votre dernière étape de reconstruction de xgboost est la bonne solution où include_package_data=False devrait rester tel quel.

Je rencontrais la même erreur sur Linux exécutant Anaconda Python 3.5.

Je pense l'avoir corrigé en apportant les modifications suivantes à setup.py :

diff --git a/python-package/setup.py b/python-package/setup.py
index 27fc212..ec9b806 100644
--- a/python-package/setup.py
+++ b/python-package/setup.py
@@ -7,7 +7,7 @@ from setuptools import setup, find_packages
 # import subprocess
 sys.path.insert(0, '.')

-CURRENT_DIR = os.path.dirname(__file__)
+CURRENT_DIR = os.path.abspath(os.path.dirname(__file__))

 # We can not import `xgboost.libpath` in setup.py directly since xgboost/__init__.py
 # import `xgboost.core` and finally will import `numpy` and `scipy` which are setup
@@ -17,6 +17,7 @@ libpath = {'__file__': libpath_py}
 exec(compile(open(libpath_py, "rb").read(), libpath_py, 'exec'), libpath, libpath)

 LIB_PATH = libpath['find_lib_path']()
+LIB_PATH = [os.path.relpath(LIB_PATH[0], CURRENT_DIR)]
 print("Install libxgboost from: %s" % LIB_PATH)
 # Please use setup_pip.py for generating and deploying pip installation
 # detailed instruction in setup_pip.py
Cette page vous a été utile?
0 / 5 - 0 notes