Fix up make pippack command for building source package for PyPI (#3199)
* Now `make pippack` works without any manual action: it will produce xgboost-[version].tar.gz, which one can use by typing `pip3 install xgboost-[version].tar.gz`. * Detect OpenMP-capable compilers (clang, gcc-5, gcc-7) on MacOS
This commit is contained in:
parent
ace4016c36
commit
017acf54d9
20
Makefile
20
Makefile
@ -198,7 +198,11 @@ endif
|
|||||||
clean:
|
clean:
|
||||||
$(RM) -rf build build_plugin lib bin *~ */*~ */*/*~ */*/*/*~ */*.o */*/*.o */*/*/*.o #xgboost
|
$(RM) -rf build build_plugin lib bin *~ */*~ */*/*~ */*/*/*~ */*.o */*/*.o */*/*/*.o #xgboost
|
||||||
$(RM) -rf build_tests *.gcov tests/cpp/xgboost_test
|
$(RM) -rf build_tests *.gcov tests/cpp/xgboost_test
|
||||||
cd R-package/src; $(RM) -rf rabit src include dmlc-core amalgamation *.so *.dll; cd $(ROOTDIR)
|
if [ -d "R-package/src" ]; then \
|
||||||
|
cd R-package/src; \
|
||||||
|
$(RM) -rf rabit src include dmlc-core amalgamation *.so *.dll; \
|
||||||
|
cd $(ROOTDIR); \
|
||||||
|
fi
|
||||||
|
|
||||||
clean_all: clean
|
clean_all: clean
|
||||||
cd $(DMLC_CORE); "$(MAKE)" clean; cd $(ROOTDIR)
|
cd $(DMLC_CORE); "$(MAKE)" clean; cd $(ROOTDIR)
|
||||||
@ -212,16 +216,28 @@ pypack: ${XGBOOST_DYLIB}
|
|||||||
cp ${XGBOOST_DYLIB} python-package/xgboost
|
cp ${XGBOOST_DYLIB} python-package/xgboost
|
||||||
cd python-package; tar cf xgboost.tar xgboost; cd ..
|
cd python-package; tar cf xgboost.tar xgboost; cd ..
|
||||||
|
|
||||||
# create pip installation pack for PyPI
|
# create pip source dist (sdist) pack for PyPI
|
||||||
pippack: clean_all
|
pippack: clean_all
|
||||||
rm -rf xgboost-python
|
rm -rf xgboost-python
|
||||||
|
# remove symlinked directories in python-package/xgboost
|
||||||
|
rm -rf python-package/xgboost/lib
|
||||||
|
rm -rf python-package/xgboost/dmlc-core
|
||||||
|
rm -rf python-package/xgboost/include
|
||||||
|
rm -rf python-package/xgboost/make
|
||||||
|
rm -rf python-package/xgboost/rabit
|
||||||
|
rm -rf python-package/xgboost/src
|
||||||
cp -r python-package xgboost-python
|
cp -r python-package xgboost-python
|
||||||
cp -r Makefile xgboost-python/xgboost/
|
cp -r Makefile xgboost-python/xgboost/
|
||||||
cp -r make xgboost-python/xgboost/
|
cp -r make xgboost-python/xgboost/
|
||||||
cp -r src xgboost-python/xgboost/
|
cp -r src xgboost-python/xgboost/
|
||||||
|
cp -r tests xgboost-python/xgboost/
|
||||||
cp -r include xgboost-python/xgboost/
|
cp -r include xgboost-python/xgboost/
|
||||||
cp -r dmlc-core xgboost-python/xgboost/
|
cp -r dmlc-core xgboost-python/xgboost/
|
||||||
cp -r rabit xgboost-python/xgboost/
|
cp -r rabit xgboost-python/xgboost/
|
||||||
|
# Use setup_pip.py instead of setup.py
|
||||||
|
mv xgboost-python/setup_pip.py xgboost-python/setup.py
|
||||||
|
# Build sdist tarball
|
||||||
|
cd xgboost-python; python setup.py sdist; mv dist/*.tar.gz ..; cd ..
|
||||||
|
|
||||||
# Script to make a clean installable R package.
|
# Script to make a clean installable R package.
|
||||||
Rpack: clean_all
|
Rpack: clean_all
|
||||||
|
|||||||
@ -12,7 +12,10 @@ sys.path.insert(0, '.')
|
|||||||
# please don't use this file for installing from github
|
# please don't use this file for installing from github
|
||||||
|
|
||||||
if os.name != 'nt': # if not windows, compile and install
|
if os.name != 'nt': # if not windows, compile and install
|
||||||
os.system('sh ./xgboost/build-python.sh')
|
# if not windows, compile and install
|
||||||
|
if len(sys.argv) < 2 or sys.argv[1] != 'sdist':
|
||||||
|
# do not build for sdist
|
||||||
|
os.system('sh ./xgboost/build-python.sh')
|
||||||
else:
|
else:
|
||||||
print('Windows users please use github installation.')
|
print('Windows users please use github installation.')
|
||||||
sys.exit()
|
sys.exit()
|
||||||
@ -30,16 +33,14 @@ class BinaryDistribution(Distribution):
|
|||||||
# We can not import `xgboost.libpath` in setup.py directly since xgboost/__init__.py
|
# 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
|
# import `xgboost.core` and finally will import `numpy` and `scipy` which are setup
|
||||||
# `install_requires`. That's why we're using `exec` here.
|
# `install_requires`. That's why we're using `exec` here.
|
||||||
libpath_py = os.path.join(CURRENT_DIR, 'xgboost/libpath.py')
|
# do not import libpath for sdist
|
||||||
libpath = {'__file__': libpath_py}
|
if len(sys.argv) < 2 or sys.argv[1] != 'sdist':
|
||||||
exec(compile(open(libpath_py, "rb").read(), libpath_py, 'exec'), libpath, libpath)
|
libpath_py = os.path.join(CURRENT_DIR, 'xgboost/libpath.py')
|
||||||
|
libpath = {'__file__': libpath_py}
|
||||||
|
exec(compile(open(libpath_py, "rb").read(), libpath_py, 'exec'), libpath, libpath)
|
||||||
|
|
||||||
LIB_PATH = libpath['find_lib_path']()
|
LIB_PATH = libpath['find_lib_path']()
|
||||||
|
|
||||||
# to deploy to pip, please use
|
|
||||||
# make pythonpack
|
|
||||||
# python setup.py register sdist upload
|
|
||||||
# and be sure to test it firstly using "python setup.py register sdist upload -r pypitest"
|
|
||||||
setup(name='xgboost',
|
setup(name='xgboost',
|
||||||
version=open(os.path.join(CURRENT_DIR, 'xgboost/VERSION')).read().strip(),
|
version=open(os.path.join(CURRENT_DIR, 'xgboost/VERSION')).read().strip(),
|
||||||
description='XGBoost Python Package',
|
description='XGBoost Python Package',
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
# This is a simple script to make xgboost in MAC and Linux for python wrapper only
|
# This is a simple script to make xgboost in MAC and Linux for python wrapper only
|
||||||
# Basically, it first try to make with OpenMP, if fails, disable OpenMP and make it again.
|
# Basically, it first try to make with OpenMP, if fails, disable OpenMP and make it again.
|
||||||
# This will automatically make xgboost for MAC users who don't have OpenMP support.
|
# This will automatically make xgboost for MAC users who don't have OpenMP support.
|
||||||
@ -9,22 +9,44 @@
|
|||||||
# note: this script is build for python package only, and it might have some filename
|
# note: this script is build for python package only, and it might have some filename
|
||||||
# conflict with build.sh which is for everything.
|
# conflict with build.sh which is for everything.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
#pushd xgboost
|
#pushd xgboost
|
||||||
oldpath=`pwd`
|
oldpath=`pwd`
|
||||||
cd ./xgboost/
|
cd ./xgboost/
|
||||||
|
|
||||||
|
if echo "${OSTYPE}" | grep -q "darwin"; then
|
||||||
|
LIB_XGBOOST=libxgboost.dylib
|
||||||
|
# Use OpenMP-capable compiler if possible
|
||||||
|
if which g++-5; then
|
||||||
|
export CC=gcc-5
|
||||||
|
export CXX=g++-5
|
||||||
|
elif which g++-7; then
|
||||||
|
export CC=gcc-7
|
||||||
|
export CXX=g++-7
|
||||||
|
elif which clang++; then
|
||||||
|
export CC=clang
|
||||||
|
export CXX=clang++
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
LIB_XGBOOST=libxgboost.so
|
||||||
|
fi
|
||||||
|
|
||||||
#remove the pre-compiled .so and trigger the system's on-the-fly compiling
|
#remove the pre-compiled .so and trigger the system's on-the-fly compiling
|
||||||
make clean
|
make clean
|
||||||
if make lib/libxgboost.so -j4; then
|
if make lib/${LIB_XGBOOST} -j4; then
|
||||||
echo "Successfully build multi-thread xgboost"
|
echo "Successfully build multi-thread xgboost"
|
||||||
else
|
else
|
||||||
echo "-----------------------------"
|
echo "-----------------------------"
|
||||||
echo "Building multi-thread xgboost failed"
|
echo "Building multi-thread xgboost failed"
|
||||||
echo "Start to build single-thread xgboost"
|
echo "Start to build single-thread xgboost"
|
||||||
make clean
|
make clean
|
||||||
make lib/libxgboost.so -j4 USE_OPENMP=0
|
make lib/${LIB_XGBOOST} -j4 USE_OPENMP=0
|
||||||
echo "Successfully build single-thread xgboost"
|
echo "Successfully build single-thread xgboost"
|
||||||
echo "If you want multi-threaded version"
|
echo "If you want multi-threaded version"
|
||||||
echo "See additional instructions in doc/build.md"
|
echo "See additional instructions in doc/build.md"
|
||||||
fi
|
fi
|
||||||
cd $oldpath
|
cd $oldpath
|
||||||
|
|
||||||
|
set +x
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user