关于打包 XGBoost Python 包的说明
如何构建二进制 wheels 和源码分发包
Wheels 和源码分发包(简称 sdist)是打包和分发 Python 包的两种主要机制。
源码分发包 (sdist) 是一个包含源代码的 tarball(
.tar.gz
扩展名)。Wheel 是一个 ZIP 压缩归档文件(
.whl
扩展名),代表一个已构建的分发包。与 sdist 不同,wheel 可以包含已编译的组件。这些已编译的组件在分发之前已经编译好,使得终端用户安装 wheel 更加方便。包含已编译组件的 wheel 称为二进制 wheel。
请参阅 Python 打包用户指南,了解有关 Python 包通常如何打包和分发的更多信息。
本文档的其余部分将重点介绍 XGBoost 的打包和分发。
构建 sdists
对于 XGBoost,sdist 既包含 Python 代码,也包含 C++ 代码,以便 XGBoost 的核心部分可以被编译成共享库 libxgboost.so
[1]。
您可以通过以下方式获得 sdist
$ python -m build --sdist .
(首先需要安装 build
包:pip install build
或 conda install python-build
。)
使用 sdist 运行 pip install
将启动 CMake 和 C++ 编译器,将捆绑的 C++ 代码编译成 libxgboost.so
$ pip install -v xgboost-2.0.0.tar.gz # Add -v to show build progress
构建二进制 wheels
您也可以通过以下方式构建 wheel
$ pip wheel --no-deps -v .
值得注意的是,生成的 wheel 包含共享库 libxgboost.so
的副本 [1]。由于包含已编译的二进制文件,该 wheel 是一个二进制 wheel。
使用二进制 wheel 运行 pip install
会将 wheel 的内容解压到当前的 Python 环境中。由于 wheel 已经包含了 libxgboost.so
的预构建副本,因此在安装时无需进行构建。所以使用二进制 wheel 进行 pip install
会很快完成
$ pip install xgboost-2.0.0-py3-none-linux_x86_64.whl # Completes quickly
脚注