XGBoost Python 包打包注意事项

如何构建二进制 wheel 和源发行版

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

构建二进制 wheel

您也可以按如下方式构建一个 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

脚注