构建 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 预设进行构建,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 开发人员环境设置文章的故障排除 部分了解更多信息。

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

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

注意

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