跳到內容

本文件專為想要更深入了解這些腳本的 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 建置一起使用

對於 arrow 開發人員來說,這種設定更為常見,他們可能需要同時變更 R 套件和 libarrow 原始碼。請參閱 開發人員設定文件 以取得更多資訊。