关于打包 XGBoost 的 Python 包的说明

如何构建二进制轮子和源代码分发

轮子和源代码分发(简称 sdist)是打包和分发 Python 包的两种主要机制。

  • 源代码分发包 (sdist) 是一个包含源代码的压缩包(.tar.gz 扩展名)。

  • wheel 是一个 ZIP 压缩的存档文件(带有 .whl 扩展名),代表一个 已构建 的发行版。与源代码发行版(sdist)不同,wheel 可以包含编译后的组件。编译后的组件在分发前就已经编译完成,这使得最终用户安装 wheel 更加方便。包含编译后组件的 wheel 被称为 二进制 wheel

请参阅 Python 打包用户指南 以了解更多关于 Python 包如何打包和分发的信息。

在本文件的其余部分,我们将重点介绍 XGBoost 的打包和分发。

构建源代码分发包

在 XGBoost 的情况下,sdist 包含了 Python 代码以及 C++ 代码,因此 XGBoost 的核心部分可以被编译成共享库 libxgboost.so [1]

您可以按如下方式获取源代码分发包:

$ python -m build --sdist .

(您需要先安装 build 包:pip install buildconda install python-build。)

运行 pip install 时使用源代码分发包(sdist)将会启动 CMake 和一个 C++ 编译器,将捆绑的 C++ 代码编译成 libxgboost.so

$ pip install -v xgboost-2.0.0.tar.gz  # Add -v to show build progress

构建二进制轮子

你也可以如下构建一个wheel:

$ pip wheel --no-deps -v .

值得注意的是,生成的 wheel 包含共享库 libxgboost.so [1] 的副本。由于它包含一个编译后的二进制文件,因此这是一个 二进制 wheel

运行 pip install 时使用二进制轮子会将轮子的内容提取到当前的 Python 环境中。由于轮子已经包含了一个预构建的 libxgboost.so 副本,因此在安装时不需要再构建。因此,使用二进制轮子的 pip install 完成得很快:

$ pip install xgboost-2.0.0-py3-none-linux_x86_64.whl  # Completes quickly

脚注