Xgboost: libpath['find_lib_path']()๋Š” Windows์—์„œ libxgboost.dll์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ์„ค์น˜ ์‹คํŒจ

์— ๋งŒ๋“  2016๋…„ 12์›” 07์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dmlc/xgboost

ํ™˜๊ฒฝ ์ •๋ณด

์šด์˜ ์ฒด์ œ: ์œˆ๋„์šฐ 7

์ปดํŒŒ์ผ๋Ÿฌ: MSVC++ 12(๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค 2013)

์‚ฌ์šฉ๋œ ํŒจํ‚ค์ง€(python/R/jvm/C++): Python 3.4.4

xgboost ์‚ฌ์šฉ๋œ ๋ฒ„์ „: 0.6

์†Œ์Šค์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  1. ์ปค๋ฐ‹ ํ•ด์‹œ( git rev-parse HEAD ): e7fbc8591fa7277ee4c474b7371c48c11b34cbde
  2. ๋กœ๊ทธ:
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.

python ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  1. Python ๋ฒ„์ „ ๋ฐ ๋ฐฐํฌ - Win64์šฉ 3.4.4 ๊ณต์‹ ๋นŒ๋“œ
  2. ์†Œ์Šค์—์„œ ์„ค์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ xgboost ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น - python.exe setup.py install (setuptools๋ฅผ ํ†ตํ•ด)

์žฌํ˜„ ๋‹จ๊ณ„

  1. github์—์„œ xgboost ์†Œ์Šค ์ฝ”๋“œ ๋‹ค์šด๋กœ๋“œ
  2. mkdir ๋นŒ๋“œ && cd ๋นŒ๋“œ && cmake .. -G"๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค 12 2013 Win64"
  3. VS2013์—์„œ xgboost.sln์„ ์—ด๊ณ  x64 ํ”Œ๋žซํผ์šฉ ๋ฆด๋ฆฌ์Šค ๊ตฌ์„ฑ์œผ๋กœ ๋ชจ๋“  ์†”๋ฃจ์…˜์„ ๋นŒ๋“œํ•˜์‹ญ์‹œ์˜ค. lib/libxgboost.dll ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. cd ..python-package && python.exe setup.py ์„ค์น˜

๋‹น์‹ ์€ ๋ฌด์—‡์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

  1. SOURCES.txt ํŒŒ์ผ์˜ ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ”๊พธ๊ธฐ - ์ด ํŒŒ์ผ์€ ๋งค๋ฒˆ ๋ฎ์–ด์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  2. python-package/MANIFEST.in์„ ๋ณ€๊ฒฝํ•˜๊ณ  lib ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ์™ธํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ .dll ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  3. python-package/setup.py, 19ํ–‰ ๋ฐ”๊พธ๊ธฐ
    LIB_PATH = libpath['find_lib_path']()
    ์—๊ฒŒ
    LIB_PATH = ['../lib/libxgboost.dll']
    ์ด๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด์—ˆ์Šต๋‹ˆ๋‹ค.
    ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ด๊ฒƒ์€ ๋ฌธ์ œ์ด๋ฉฐ XGBoost ํŒ€์ด ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ๋˜ํ•œ centos 6.5 64์—์„œ ์ด ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  python-package/setup.py๋ฅผ ํŽธ์ง‘ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
38๋ฒˆ์งธ "include_package_data=False"๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ "python setup.py install"์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ "xgboost๋ฅผ xgb๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ"๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ๋ชจ๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ๋‹ค์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํŒŒ์ผ์„ ์ •๋ฆฌํ•œ ๋‹ค์Œ xgboost๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ ์„ค์น˜๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ด์ œ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค!


2016๋…„ 12์›” 31์ผ:
centos 7 x86_64์— xgboost๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ xgboost๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ณ  python์„ ์„ค์น˜ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ์„ ์œ„ํ•ด make ๋˜๋Š” cmake๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•˜๊ณ  ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ.
๋‚˜๋Š” ๋‹จ์ง€ ๋ฒ„์ „ ๋•Œ๋ฌธ์— centos 7์—์„œ ์ข‹์ง€ ์•Š์€ ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

๋‚˜๋Š” ๋˜ํ•œ centos 6.5 64์—์„œ ์ด ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  python-package/setup.py๋ฅผ ํŽธ์ง‘ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
38๋ฒˆ์งธ "include_package_data=False"๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ "python setup.py install"์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ "xgboost๋ฅผ xgb๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ"๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ๋ชจ๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ๋‹ค์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํŒŒ์ผ์„ ์ •๋ฆฌํ•œ ๋‹ค์Œ xgboost๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ ์„ค์น˜๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ด์ œ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค!


2016๋…„ 12์›” 31์ผ:
centos 7 x86_64์— xgboost๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ xgboost๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ณ  python์„ ์„ค์น˜ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ์„ ์œ„ํ•ด make ๋˜๋Š” cmake๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•˜๊ณ  ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ.
๋‚˜๋Š” ๋‹จ์ง€ ๋ฒ„์ „ ๋•Œ๋ฌธ์— centos 7์—์„œ ์ข‹์ง€ ์•Š์€ ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@anddelu include_package_data=False ๋Š” ํŒจํ‚ค์ง€ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด MANIFEST.in ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ˆ˜์ด๋ฉฐ ์ด๋Š” ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์„ค์น˜์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. xgboost๋ฅผ ์žฌ๊ตฌ์ถ•ํ•˜๋Š” ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” include_package_data=False ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Anaconda Python 3.5๋ฅผ ์‹คํ–‰ํ•˜๋Š” Linux์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

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
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰