构建 Arrow 库 🏋🏿‍♀️#

Arrow 项目包含许多库,支持在多种语言中进行工作。大多数库(C++、C#、Go、Java、JavaScript、Julia 和 Rust)已经包含了独立的 Arrow 实现。

C (Glib)、MATLAB、Python、R 和 Ruby 则不同,它们构建在 C++ 库之上。在本指南的这一部分,我们将尝试友好地介绍构建过程,处理其中一些库以及它们如何与 C++ 库协同工作。

如果您决定为 Arrow 贡献代码,您可能需要编译 C++ 源代码。这可以通过一个名为 CMake 的工具完成,您可能对其有经验,也可能没有。如果没有,本指南的这一部分将帮助您更好地理解 CMake 以及构建 Arrow 的 C++ 代码的过程。

本文档旨在帮助解释从源代码构建 Arrow C++ 库相关的概念和所需工具。如果您正在寻找具体的必需步骤,或者已经熟悉编译 Arrow C++ 库,则可以直接前往 C++PyArrowR 包构建章节

构建 Arrow C++#

为什么要从源代码构建 Arrow C++?#

对于构建在 C++ 实现之上的 Arrow 实现(例如 Python 和 R),已经为底层的 C++ 函数编写了包装器和接口。如果您想在 PyArrow 或 R 包上工作,您可能还需要编辑 C++ 库的源代码。

从源代码构建 C++ 库的详细说明可以在这里找到。

关于 CMake#

CMake 是一个跨平台的构建系统生成器,它将实际的构建工作委托给其他程序,例如 makeninja。如果您在构建过程中遇到错误,首先要做的是仔细查看错误消息,并查阅构建文档中是否有类似的错误建议。更改用于编译 Arrow 的 CMake 标志也可能很有用。

CMake 预设#

您也可以尝试使用 CMake 预设进行构建,这些预设是 Arrow 的 CMake 的构建和测试配置集合。它们是非常有用的起点。

关于 CMake 预设的更多详细信息可以在CMake 预设章节中找到。

可选标志和环境变量#

CMake 构建中使用的标志用于包含附加组件和处理第三方依赖项。C++ 库的构建可以是在不使用任何标志的情况下进行的最小化构建,也可以通过从列表中添加可选组件来更改。

另请参阅

可选标志的完整列表: 可选组件

R 和 Python 在其各自的构建中有特定的标志列表需要包含。您可以在本节末尾找到相关链接。

通常在 Python 方面,选项通过 CMake 标志设置,路径通过环境变量设置。在 R 中,环境变量用于所有与构建相关的事项,也包括设置 CMake 标志。

构建其他 Arrow 库#

构建完 Arrow C++ 库后,您还需要在其基础上构建 PyArrow。原因也是一样的:以便您能够编辑代码并在本地对编辑后的代码运行测试。

为什么我们必须单独构建?

如本页开头所述,Arrow 项目的 Python 部分是构建在 C++ 库之上的。为了能够修改 Arrow 的 Python 部分以及 Arrow 的 C++ 部分,您需要单独构建它们。

我们希望这篇介绍足以帮助您开始构建过程。

另请参阅

按照说明将 PyArrow 与 C++ 库一起构建

或者

当您更改代码时,您可能需要重新编译 PyArrow 或 Arrow C++

重新编译 Cython

如果您只修改 .py 文件,则无需重新编译 PyArrow。但是,如果您修改了 .pyx.pxd 文件,则应重新编译它。

为此,再次运行此命令

$ python setup.py build_ext --inplace

重新编译 C++

类似地,如果您修改了任何 C++ 文件,您将需要重新编译 C++ 代码。在这种情况下,再次重新运行构建命令。

在 R 包中开发代码时,根据您的操作系统和计划的更改,您可能需要或不需要从源代码构建 Arrow C++ 库(在 R 文档中通常称为 'libarrow')。

有关此内容的更多信息以及设置 Arrow C++ 库和 Arrow R 包的完整说明,可以在 R 开发者文档中找到。

重新安装 R 包并运行 make clean

如果您修改了 Arrow 代码的 C++ 部分(也称为 libarrow),您需要

  1. 重新安装 libarrow,

  2. 运行 make clean

  3. 重新安装 R 包。

函数 make clean 定义在 r/Makefile 中,它会移除 r/src/ 目录中所有缓存的对象代码,确保您获得一个干净的重新安装。该 Makefile 还包含诸如 make testmake doc 等函数,并被添加进来以帮助在命令行中执行常见任务。

有关更多信息,请参阅 R 开发者环境设置文章的故障排除章节。

从源代码构建 vs. 使用二进制文件

使用二进制文件是一种快速简单的方式来使用 Arrow 的最新版本。但是,如果您使用二进制文件,则意味着您将无法修改 Arrow C++ 库。

注意

每种语言都有自己处理二进制文件的方式。要获取更多信息,请导航到您感兴趣的语言章节查找更多信息。