XGBoostをWindows用にビルドする

PythonのライブラリであるXGBoostは、正式にはソースコードで配布されているので、これをWindows環境でビルドする。
非公式のリポジトリにはwhlファイルで配布されているが、依存しているライブラリが古く、特定の機能が使えない。

今回はVisual Studio Communityを使わない環境でビルドを行う。

ビルドに必要なツールのインストール

Git for Windows

https://git-for-windows.github.io/

.NET Framework 4.5.2

Visual Studio 2015 Build Toolsに必要。
2017/11/02現在、.NET Framework 4.5.1以降は4.5.2しかサポートされていないので4.5.2をインストールする。
以下のサイトより、”NDP452-KB2901907-x86-x64-AllOS-ENU.exe”をダウンロードする。
https://msdn.microsoft.com/ja-jp/library/ee942965(v=vs.110).aspx#再頒布可能パッケージ

ダウンロードしたらインストール。

NDP452-KB2901907-x86-x64-AllOS-ENU.exe /quiet /norestart

$nameProc = "NDP452-KB2901907-x86-x64-AllOS-ENU"
for(;$null -ne (Get-Process -Name $nameProc -ErrorAction SilentlyContinue); Start-Sleep -Seconds 5) { ; }

Visual Studio 2015 Build Tools

Visual Studioソリューションファイルを扱うためのビルドツール。
こちらから”BuildTools_Full.exe”をダウンロードし、インストール。
https://www.microsoft.com/ja-JP/download/details.aspx?id=48159

BuildTools_Full.exe /Quiet /NoRefresh /NoRestart /NoWeb /Passive

$nameProc = "BuildTools_Full"
for(;$null -ne (Get-Process -Name $nameProc -ErrorAction SilentlyContinue); Start-Sleep -Seconds 5) { ; }

Visual C++ 2015 Build Tools

実際にコンパイルを行うためのコンパイラ・リンカ。
こちらから”visualcppbuildtools_full.exe”をダウンロードし、インストール。
http://landinghub.visualstudio.com/visual-cpp-build-tools

visualcppbuildtools_full.exe /Quiet /NoRefresh /NoRestart /NoWeb /Passive

$nameProc = "visualcppbuildtools_full"
for(;$null -ne (Get-Process -Name $nameProc -ErrorAction SilentlyContinue); Start-Sleep -Seconds 5) { ; }

CMAKE

こちらからCMAKEをzipでダウンロードし、展開。展開先を環境変数PATHに加える。

Download

ビルド

git clone --recursive https://github.com/dmlc/xgboost


cd xgboost\build
cmake.exe ..\ -G"Visual Studio 14 2015 Win64"



"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" .\xgboost.sln



dir ..\lib\xgboost.dll
copy ..\lib\xgboost.dll ..\python-package\xgboost\

whlファイル化

ファイルを配布しやすいようにwhlファイル化しておく。

cd ..\python-package

python setup.py bdist_wheel



# 存在確認
dir .\dist\xgboost-*.whl

あとは、通常のpip installでwhlファイルをインストールすればよい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です