Xgboost: Python 2.7์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ Win 7์—์„œ 127 ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‹คํŒจํ•จ

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

Windows 7, R์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค
ํŒŒ์ด์ฌ 2.7.10 | EPD 7.5-3(64๋น„ํŠธ), numpy, scipy, theano ๋“ฑ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„:

  • ์žฌ๊ท€์ ์œผ๋กœ ๋ณต์ œ๋œ ์ €์žฅ์†Œ
  • ๊ธฐ๋ณธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋นŒ๋“œ ๋ฐ ๋งŒ๋“ค๊ธฐ(๋ˆˆ์— ๋ณด์ด๋Š” ์˜ค๋ฅ˜ ์—†์Œ, libxgboost.dll ๋ฐ libxgboost.a ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” /lib ํด๋”์— ์žˆ์Œ)
  • python-package ํด๋”๋กœ ์ „ํ™˜ํ•˜๊ณ  python setup.py install ํ˜ธ์ถœํ•˜๊ณ  ๋‹ค์‹œ ๋ˆˆ์— ๋ณด์ด๋Š” ์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ด์ฌ ์‹œ์ž‘, ํ˜ธ์ถœ
    >>>import xgboost
    ๋‹ค์Œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  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

์‹ค์ œ๋กœ ๋กœ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด core.py๋ฅผ ํ•ดํ‚นํ–ˆ์Šต๋‹ˆ๋‹ค. :)
์‹ค์ œ๋กœ ์˜ฌ๋ฐ”๋ฅธ dll์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
/Sources/xgb/python-package/xgboost/../../lib/libxgboost.dll
์ •ํ™•ํžˆ ๋ช‡ ๋ถ„ ์ „์— ์ง€์–ด์ง„ ๊ณณ์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ˆ˜์ •์œผ๋กœ ์ธํ•ด ๋งŽ์€ ์งˆ๋ฌธ์— ๋‹ต์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์›๋ž˜ ์ข€ ๋” ๋ช…ํ™•ํ•œ ์ง€์นจ ์„ ์‚ฌ์šฉํ•˜์—ฌ minGW๋กœ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์œ ๋กœ๋“  ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์˜ _beginning_์— mingw ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด(๋‚˜๋ฅผ ์œ„ํ•œ ๋์ด ์•„๋‹Œ) ํ•ด๋‹น ์ปดํŒŒ์ผ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญํ•˜์‹  dll์˜ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์‹คํŒจ์‹œ์™€ ์„ฑ๊ณต์‹œ ๋ชจ๋‘ ๋™์ผํ•˜๋ฏ€๋กœ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋‹ˆ ์œ ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ๊ฒฝ๋กœ ๋ณ€์ˆ˜์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— mingw/bin ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ minGW ๋˜๋Š” minGW์™€ python์ด ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹(์—ฌ๊ธฐ์„œ๋Š” ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹˜)์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

REAL ์ˆ˜์ •์€ cmake๋ฅผ ์„ค์น˜ํ•˜๊ณ (์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€!) Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜๊ณ  Visual Studio ์ง€์นจ(์ •๋ง ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์•ผ ํ•˜๋ฉฐ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด ์ž‘์—…์— ๋Šฅ์ˆ™ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค)์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ฒด์ ์œผ๋กœ: Windows์šฉ Git์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์นจ์„ ๋”ฐ๋ฅด๊ณ , ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ , cmake๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๊ฒฝ๋กœ์— 'cmake'๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , Visual Studio ์„ค์น˜ ์ง€์นจ์„ ๋”ฐ๋ผ cmake ๋ฐ Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์—†์Œ), ์ด์ œ ์œ ์ผํ•œ libxgboost.dll์„ python-packages ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•˜๊ณ  ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—ด๊ณ  ์ด์ œ python-packages์—์„œ "python setup.py install"์„ ์—ฝ๋‹ˆ๋‹ค.

Visual Studio ์„ค์น˜์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์—์„œ minGW์˜ ๊ฒฝ๋กœ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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

  1. xgboost๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๊นŒ?

    ๋‹น์‹ ์€ ์ด๊ฒƒ์„ ๋”ฐ๋ผ์•ผํ•ฉ๋‹ˆ๋‹ค:
    http://xgboost.readthedocs.io/en/latest/build.html#building -on-windows

  2. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค

๋‚˜๋Š” ๋‹น์‹ ๊ณผ ๋˜‘๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ปดํ“จํ„ฐ์—์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ Python์„ ์ œ๊ฑฐํ•˜๊ณ  ์žฌ๋ถ€ํŒ…ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์ด ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ˆ˜์ •์œผ๋กœ ์ธํ•ด ๋งŽ์€ ์งˆ๋ฌธ์— ๋‹ต์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์›๋ž˜ ์ข€ ๋” ๋ช…ํ™•ํ•œ ์ง€์นจ ์„ ์‚ฌ์šฉํ•˜์—ฌ minGW๋กœ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์œ ๋กœ๋“  ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์˜ _beginning_์— mingw ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด(๋‚˜๋ฅผ ์œ„ํ•œ ๋์ด ์•„๋‹Œ) ํ•ด๋‹น ์ปดํŒŒ์ผ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญํ•˜์‹  dll์˜ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์‹คํŒจ์‹œ์™€ ์„ฑ๊ณต์‹œ ๋ชจ๋‘ ๋™์ผํ•˜๋ฏ€๋กœ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋‹ˆ ์œ ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ๊ฒฝ๋กœ ๋ณ€์ˆ˜์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— mingw/bin ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ minGW ๋˜๋Š” minGW์™€ python์ด ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹(์—ฌ๊ธฐ์„œ๋Š” ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹˜)์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

REAL ์ˆ˜์ •์€ cmake๋ฅผ ์„ค์น˜ํ•˜๊ณ (์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€!) Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜๊ณ  Visual Studio ์ง€์นจ(์ •๋ง ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์•ผ ํ•˜๋ฉฐ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด ์ž‘์—…์— ๋Šฅ์ˆ™ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค)์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ฒด์ ์œผ๋กœ: Windows์šฉ Git์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์นจ์„ ๋”ฐ๋ฅด๊ณ , ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ , cmake๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๊ฒฝ๋กœ์— 'cmake'๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , Visual Studio ์„ค์น˜ ์ง€์นจ์„ ๋”ฐ๋ผ cmake ๋ฐ Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์—†์Œ), ์ด์ œ ์œ ์ผํ•œ libxgboost.dll์„ python-packages ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•˜๊ณ  ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—ด๊ณ  ์ด์ œ python-packages์—์„œ "python setup.py install"์„ ์—ฝ๋‹ˆ๋‹ค.

Visual Studio ์„ค์น˜์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์—์„œ minGW์˜ ๊ฒฝ๋กœ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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