关于打包 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 build
或 conda 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
脚注