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 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
构建二进制 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
脚注