在 M1 Macs 上安裝 h5py 及 pandas 的 HDF5 支援

最近因為被指派說要研究 HDF5,同時比較一下跟 SQL 的效能比較,試著在我自己的 M1 MacBook Air 上裝 h5py,果不其然又是惡夢一場(倒)。

前情提要就是目前還是有蠻多科學運算相關的 libraries 對 ARM based 的作業系統都還是支援度不佳,M1 Macs 當然也不例外。雖然隨著 Macs 全面使用 ARM 架構之後相信之後會越來越好。

總之,經過了一番折騰,終於搞定現在在 M1 Macs 上安裝 h5py 的方法。

首先,先確定你在 Terminal 中使用的 brew 是原生而非 x86 版本的 brew。測試的方式是在 Terminal 中打 which brew,顯示出來的結果應該要是
/opt/homebrew/bin/brew

確定使用的 brew 是原生的之後,以 brew 安裝 HDF5,指令當然就是
brew install hdf5

接著,確定你有安裝好原生支援的 numpy(現在最新版本的 numpy 1.20.3 確認是沒問題的)。接著我們就可以安裝 h5py。用 pip 安裝當然是第一個想到的方法,但由於 h5py 的 setup.py 沒有把判斷式寫好,導致就算系統上已經安裝好最新的 numpy,h5py 在安裝時還是去用了 1.19.3 版。因此我們需要作一點小改動如下
python3 -m pip install --no-build-isolation h5py

這樣就搞定了在 Python 內使用 HDF5 的前置作業。不過,由於處理資料時還是很常會使用 pandas,又剛好 pandas 的 Dataframe 有 .to_hdf 函數可用,有些 libraries 就需要額外安裝。主要需要裝的其實就是 PyTables,但 PyTables 偏偏直接 pip 安裝又是各種問題,所以還是得一步一步來。

解決安裝 PyTables 的方法主要參考的是這篇。首先,把 PyTables 需要的 libraries 裝起來。這些包括 hdf5、c-blosc、lzo,以及 bzip2。 hdf5 前面已經安裝過了,剩下的同樣可以用 brew 輕鬆地安裝起來。

安裝完之後確定一下 hdf5 的安裝路徑在哪。你可以透過以下的指令來作這件事情
brew info -q hdf5|grep '/opt/homebrew'

輸出的結果應該會類似
/opt/homebrew/Cellar/hdf5/1.12.1 (273 files, 20.9MB) *

接下來我們就可以透過 pip 來安裝 PyTables 了。方法是
HDF5_DIR=/opt/homebrew/Cellar/hdf5/1.12.1 python3 -m pip install tables

到這邊你的 pandas 應該就可以正常地讀寫 HDF5 了。

留言

這個網誌中的熱門文章

[S7換機紀錄] 如何減輕AMOLED傷害你的眼睛

MacBook Pro 2013-2015 更換 NVMe SSD 紀錄