跳到内容

本文档专门为希望更多了解这些脚本的 arrow *开发者* 而设计。如果您是 arrow *用户* 正在寻找安装 arrow 的帮助,请参阅 安装指南

arrow R 包需要安装 Arrow C++ 库(也称为 libarrow)才能正常工作。可以通过多种不同的方式安装 libarrow

  • 作为 R 包安装过程的一部分
  • 一个系统包
  • 您在安装 R 包的上下文之外自己构建的库

下面,我们将依次讨论这些设置。

在 R 包安装期间安装 libarrow

运行 R CMD INSTALL . 时会触发许多脚本,对于 Arrow 用户来说,这些脚本应该都可以正常工作,无需配置,并且会提取最完整的部分(例如,我们托管的官方二进制文件)。这些脚本的工作之一是确定 libarrow 是否已安装,如果未安装,则安装它。

这些脚本的概述如下所示

  • configureconfigure.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 安装。

Flowchart of libarrow installation on Windows systems - find full descriptions in sections 'Checking for existing libarrow installations' and 'Downloading libarrow' below

检查现有的 libarrow 安装

在 Windows 上安装 arrow R 包时,如果尚未设置 ARROW_HOME 环境变量,则安装脚本会查找现有的 libarrow 安装。如果找不到,它会检查是否已设置 R_WINLIB_LOCAL 环境变量以指向本地安装。

下载 libarrow

如果找不到任何现有的 libarrow 安装,该脚本将尝试下载所需的 libarrow 版本,首先从 nightly builds 存储库,然后从 Rwinlib 下载。该脚本首先尝试查找一个根据语义版本控制与大多数组件匹配的 libarrow 版本,如果失败,则变得不太具体(即,如果找不到版本 0.14.1.1 的二进制文件,则尝试查找版本 0.14.1 的二进制文件)。

非 Windows

在 Linux 和 macOS 上,核心逻辑是

  1. 如果 FORCE_BUNDLED_BUILD=true,则跳到步骤 3。
  2. 在系统上查找 libarrow。如果存在,请确保其版本与 R 包兼容。
  3. 如果找不到合适的 libarrow,则下载它(如果允许)或从源代码构建它。
  4. 确定此 libarrow 具有哪些功能以及它需要哪些其他标志,并在 src/Makevars 中设置它们,以便在编译绑定时使用。
在系统上查找 libarrow

configure 脚本将在三个位置查找 libarrow

  1. 环境变量 ARROW_HOME 中的路径(如果已设置)
  2. pkg-config 找到的任何内容,除非 ARROW_USE_PKG_CONFIG=false
  3. 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 包时下载并捆绑。

从源代码构建

如果找不到合适的 libarrow 二进制文件,它将尝试在本地构建它。首先,它还会查看您是否位于 apache/arrow git 存储库的检出中,因此在那里拥有 libarrow 源文件。否则,它会从包中包含的源文件构建。根据您的系统,从源代码构建 libarrow 可能会很慢。如果 libarrow 是从源代码构建的,则会执行 inst/build_arrow_static.sh

将 R 包与作为系统包安装的 libarrow 一起使用

如果您有权安装系统包并且您正在安装 CRAN 发行版,您可能希望通过软件分发工具(例如 aptyum)使用与 R 包版本对应的官方 Apache Arrow 发行包(尽管存在一些缺点:请参阅 主安装文档中的“故障排除”部分)。请参阅 Arrow 项目安装页面以查找一些常见 Linux 发行版(包括 Debian、Ubuntu 和 CentOS)的预编译二进制包。

如果您是为 R 包做贡献的开发人员,系统 libarrow 包将不会有用,因为版本不匹配。

将 R 包与现有的 libarrow 构建一起使用

对于可能需要更改 R 包和 libarrow 源代码的 arrow 开发人员来说,此设置更为常见。有关更多信息,请参阅 开发者设置文档