本文档专门针对希望了解更多有关这些脚本的 Arrow *开发者*。如果您是希望获得 Arrow 安装帮助的 Arrow *用户*,请参阅安装指南
Arrow R 包需要安装 Arrow C++ 库(也称为 libarrow)才能正常工作。安装 libarrow 的方法有很多种
- 作为 R 包安装过程的一部分
- 系统包
- 您在 R 包安装上下文之外自行构建的库
下面,我们将依次讨论每种设置。
在 R 包安装期间安装 libarrow
运行 R CMD INSTALL .
时会触发许多脚本,对于 Arrow 用户来说,这些脚本都应该无需配置即可正常工作,并引入最完整的组件(例如我们托管的官方二进制文件)。这些脚本的任务之一是确定是否安装了 libarrow,如果没有,则安装它。
下面概述了这些脚本
configure
和configure.win
- 这些脚本分别在非 Windows 和 Windows 平台上运行R CMD INSTALL .
时触发。它们负责查找 libarrow,设置必要的构建变量,并编写用于编译 R 包中 C++ 代码的包 Makevars 文件。tools/nixlibs.R
- 此脚本由 Linux 和 macOS 上的configure
调用(或在设置了环境变量FORCE_BUNDLED_BUILD=true
的任何非 Windows 操作系统上调用)。在 Windows 上,当未设置环境变量ARROW_HOME
时,此脚本由configure.win
调用。它会查找现有的 libarrow 安装,如果找不到,则会下载相应的 libarrow 二进制文件。在非 Windows 系统上,如果找不到二进制文件,该脚本将为我们的捆绑构建设置构建过程(这是 Linux 上的默认设置)并检查依赖项。inst/build_arrow_static.sh
- 当需要构建 libarrow 时由tools/nixlibs.R
调用。它为捆绑的静态构建构建 libarrow,并镜像Arrow R 开发者指南中描述的步骤。此构建脚本也用于生成我们的预构建二进制文件。
下面描述了这些脚本为解析依赖项和安装正确组件所采取的操作。
R 包如何查找 libarrow
Windows
下图显示了 R 包如何在 Windows 上查找 libarrow 安装。
非 Windows
在 Linux 和 macOS 上,核心逻辑是
- 如果
FORCE_BUNDLED_BUILD=true
,则跳至步骤 3。 - 在系统上查找 libarrow。如果存在,请确保其版本与 R 包兼容。
- 如果找不到合适的 libarrow,请下载它(如果允许)或从源代码构建它。
- 确定此 libarrow 具有哪些功能以及它需要哪些其他标志,并在
src/Makevars
中设置它们,以便在编译绑定时使用。
在系统上查找 libarrow
configure
脚本将在三个位置查找 libarrow
- 环境变量
ARROW_HOME
中的路径(如果已设置) pkg-config
找到的任何内容,除非ARROW_USE_PKG_CONFIG=false
- Homebrew,如果您已执行
brew install apache-arrow
如果找到 libarrow 构建,它将检查该 C++ 库的版本是否与 R 包的版本匹配。如果版本不匹配,例如,当您为发行版安装了系统软件包,但您拥有 R 软件包的开发版本时,将不会使用该 libarrow。如果 C++ 库和 R 软件包都处于开发版本,您将看到一条警告消息,建议您如果遇到问题,应确保 C++ 库与 R 软件包是从同一个提交构建的,因为开发版本号不会随每次提交而更改。
预构建二进制文件
如果在系统上找不到 libarrow,R 包安装脚本接下来将尝试下载与您的本地操作系统、所需的依赖项(例如 openssl 版本)和 arrow R 包版本匹配的预构建 libarrow 二进制文件。
根据允许列表,这些在许多 Linux 发行版(仅限 x86_64 架构)上自动使用。如果您的发行版不在列表中,您可以在调用 install.packages()
之前设置 NOT_CRAN
环境变量来选择加入。如果找到,它们将在您的 R 包编译时下载并捆绑。
将 R 包与作为系统包安装的 libarrow 一起使用
如果您有权安装系统软件包并且您正在安装 CRAN 版本,您可能希望通过软件分发工具(例如 apt
或 yum
)使用与 R 软件包版本对应的官方 Apache Arrow 发布软件包(尽管存在一些缺点:请参阅主安装文档中的“故障排除”部分)。请参阅Arrow 项目安装页面以查找一些常见 Linux 发行版(包括 Debian、Ubuntu 和 CentOS)的预编译二进制软件包。
如果您是 R 包的开发者,则系统 libarrow 包将无用,因为版本不匹配。
将 R 包与现有的 libarrow 构建一起使用
这种设置对于 arrow 开发人员来说更为常见,他们可能需要更改 R 包和 libarrow 源代码。有关更多信息,请参阅开发者设置文档。