建置 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 部分以及 Arrow 的 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 開發人員環境設定文章的 疑難排解 章節中查看更多資訊。
從原始碼建置 vs. 使用二進位檔
使用二進位檔是使用 Arrow 最新版本的快速且簡單的方式。但是,如果您使用這些,則表示您將無法變更 Arrow C++ 函式庫。
注意
每種語言都有自己處理二進位檔的方式。若要取得更多資訊,請導覽至您感興趣的語言章節以尋找更多資訊。