关于打包 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 buildconda 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

脚注