LightGBM/python-package/setup.py

125 строки
4.8 KiB
Python

# coding: utf-8
# pylint: disable=invalid-name, exec-used
"""Setup lightgbm package."""
from __future__ import absolute_import
import struct
import os
import sys
import getopt
import distutils
import shutil
from distutils import dir_util
from distutils import file_util
from setuptools import find_packages, setup
if __name__ == "__main__":
build_sdist = sys.argv[1] == 'sdist'
if (8 * struct.calcsize("P")) != 64:
raise Exception('Cannot install LightGBM in 32-bit python, please use 64-bit python instead.')
use_gpu = False
use_mingw = False
use_precompile = False
try:
opts, args = getopt.getopt(sys.argv[2:], 'mgp', ['mingw', 'gpu', 'precompile'])
for opt, arg in opts:
if opt in ('-m', '--mingw'):
use_mingw = True
elif opt in ('-g', '--gpu'):
use_gpu = True
elif opt in ('-p', '--precompile'):
use_precompile = True
sys.argv = sys.argv[0:2]
except getopt.GetoptError as err:
pass
if os.path.isfile('../VERSION.txt'):
distutils.file_util.copy_file("../VERSION.txt", "./lightgbm/")
if not use_precompile or build_sdist:
if not os.path.isfile('./_IS_SOURCE_PACKAGE.txt'):
if os.path.exists("../include"):
if os.path.exists("./lightgbm/include"):
shutil.rmtree('./lightgbm/include')
distutils.dir_util.copy_tree("../include", "./lightgbm/include")
else:
raise Exception('Cannot copy ../include folder')
if os.path.exists("../src"):
if os.path.exists("./lightgbm/src"):
shutil.rmtree('./lightgbm/src')
distutils.dir_util.copy_tree("../src", "./lightgbm/src")
else:
raise Exception('Cannot copy ../src folder')
if use_gpu:
if os.path.exists("../compute"):
if os.path.exists("./lightgbm/compute"):
shutil.rmtree('./lightgbm/compute')
distutils.dir_util.copy_tree("../compute", "./lightgbm/compute")
else:
raise Exception('Cannot copy ../compute folder')
distutils.file_util.copy_file("../CMakeLists.txt", "./lightgbm/")
if build_sdist:
file_flag = open("./_IS_SOURCE_PACKAGE.txt", 'w')
file_flag.close()
if not os.path.exists("build"):
os.makedirs("build")
os.chdir("build")
cmake_cmd = "cmake "
build_cmd = "make _lightgbm"
if os.name == "nt":
if use_mingw:
cmake_cmd = cmake_cmd + " -G \"MinGW Makefiles\" "
build_cmd = "mingw32-make.exe _lightgbm"
else:
cmake_cmd = cmake_cmd + " -DCMAKE_GENERATOR_PLATFORM=x64 "
build_cmd = "cmake --build . --target _lightgbm --config Release"
if use_gpu:
cmake_cmd = cmake_cmd + " -DUSE_GPU=ON "
if not build_sdist:
print("Start to compile libarary.")
os.system(cmake_cmd + " ../lightgbm/")
os.system(build_cmd)
os.chdir("..")
data_files = []
if build_sdist:
print("remove library when building source distribution")
if os.path.exists("./lightgbm/Release/"):
shutil.rmtree('./lightgbm/Release/')
if os.path.isfile('./lightgbm/lib_lightgbm.so'):
os.remove('./lightgbm/lib_lightgbm.so')
else:
sys.path.insert(0, '.')
CURRENT_DIR = os.path.dirname(__file__)
libpath_py = os.path.join(CURRENT_DIR, 'lightgbm/libpath.py')
libpath = {'__file__': libpath_py}
exec(compile(open(libpath_py, "rb").read(), libpath_py, 'exec'), libpath, libpath)
LIB_PATH = [os.path.relpath(path, CURRENT_DIR) for path in libpath['find_lib_path']()]
print("Install lib_lightgbm from: %s" % LIB_PATH)
data_files = [('lightgbm', LIB_PATH)]
version = '2.0.1'
if os.path.isfile('./lightgbm/VERSION.txt'):
version = open('./lightgbm/VERSION.txt').read().strip()
setup(name='lightgbm',
version=version,
description='LightGBM Python Package',
install_requires=[
'wheel',
'numpy',
'scipy',
'scikit-learn'
],
maintainer='Guolin Ke',
maintainer_email='guolin.ke@microsoft.com',
zip_safe=False,
packages=find_packages(),
include_package_data=True,
data_files=data_files,
license='The MIT License(https://github.com/Microsoft/LightGBM/blob/master/LICENSE)',
url='https://github.com/Microsoft/LightGBM')
if build_sdist and os.path.isfile('./_IS_SOURCE_PACKAGE.txt'):
os.remove('./_IS_SOURCE_PACKAGE.txt')