构建 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++、PyArrow 或 R 包构建部分。
构建 Arrow C++#
为什么要从源代码构建 Arrow C++?#
对于构建在 C++ 实现之上的 Arrow 实现(例如 Python 和 R),已经为底层 C++ 函数编写了包装器和接口。如果您想在 PyArrow 或 R 包上工作,您可能也需要编辑 C++ 库的源代码。
有关从源代码构建 C++ 库的详细说明,请参见此处。
关于 CMake#
CMake 是一个跨平台的构建系统生成器,它将实际的构建工作委托给其他程序,例如 make
或 ninja
。如果您在构建过程中遇到错误,首先要做的是仔细查看错误消息,并查看构建文档中是否有任何类似的错误建议。更改编译 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 部分和 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),则需要
重新安装 libarrow,
运行
make clean
,重新安装 R 包.
make clean
函数在 r/Makefile
中定义,它将删除 r/src/
目录中所有缓存的目标代码,确保您进行干净的重新安装。Makefile
还包括 make test
、make doc
等函数,并已添加以帮助完成命令行中的常见任务。
请参阅 R 开发者环境设置文章的 故障排除 部分了解更多信息。
从源代码构建与使用二进制文件
使用二进制文件是使用最新版 Arrow 的一种快速简便的方法。但是,如果您使用这些文件,则意味着您将无法对 Arrow C++ 库进行更改。
注意
每种语言都有自己的处理二进制文件的方式。要获取更多信息,请导航到您感兴趣的语言部分以查找更多信息。