朋友買了 M1 Macbook Pro,結果開發環境全炸,Python 跟 RoR 紅字到底,所以來找我幫忙,經過一個晚上的研究,讓他的 Python 專案和 RoR 專案都復活了,其實 M1 的開發環境沒有想像中那麼糟,大多數套件其實都有支援了,只是因為使用方式不一樣,很多人可能沒有正確設定,才會導致一堆錯誤訊息冒出來(例如在 M1 上面裝 Intel 版本的 Homebrew),這邊簡單筆記處理注意事項。
- 先把 rosetta 2 跟 xcode 裝好
- App Store install Xcode
- xcode-select –install
- softwareupdate –install-rosetta
- rosetta 2 治百病,如果不想煩惱太多的話,把 rosetta 開啟來,幾乎都可以正常運作(包含 cmd 的開發工具)
- 可以選擇用一般模式開 Terminal 或是 rosetta 模式(App 按右鍵,Get Info,選擇啟用 rosetta 2)(參考)
- arch -x86_64 ${cmd}
- 範例: arch -x86_64 pip install
- 可以選擇用一般模式開 Terminal 或是 rosetta 模式(App 按右鍵,Get Info,選擇啟用 rosetta 2)(參考)
- brew install -s {app}
- -s 重新編譯模式,可能有幫助
- homebrew 有 arm 版本跟原版(用 rosetta 執行),如果用 arm 版安裝失敗的可以用 rosetta 執行原版的 homebrew 試試看
- 部分底層 Library 尚未支援 M1 ARM,例如 BoringSSL,導致我在裝 grpcio 時一直失敗,不過可以把 grpcio 使用的 SSL Library 替換成 OpenSSL 即可。
- docker 有 Tech Preview 版本,如果真的沒辦法,就用他吧
技巧
- 找出關鍵的錯誤訊息,不要整段複製,用大腦看一下錯誤訊息寫什麼
- 到套件的 Github Issue 去找,往往可以找到別人的解法,或是善用 Google、Stackoverflow。
- 搜尋時可以限制時間為一年內的資訊(但有些錯誤訊息
- 注意你的套件版本可能被鎖在舊版(因為相依等問題),可以試著把 Gemfile.lock 之類的檔案刪掉,或是試著升級套件版本(很多套件要新版才支援 M1)
總結
- 昨天的經驗,其實 M1 Macbook 用來做開發沒什麼問題了,各種套件和開發環境都可以裝上去,不過「不會那麼順利」,不會你 pip install -r requirements.txt 按下去就直接可以跑,但經過一番努力後其實是都可以的(甚至不用 rosetta )
- 為什麼不會那麼順利?不是套件不支援 ARM / M1,而是因為「套件版本太舊」,因為如果是把舊專案拉到 M1 上去執行的話,往往套件版本都鎖在舊版號,所以你會遇到一堆錯誤訊息其實是來自版本和相依問題,例如 grpcio 舊版可能不支援 M1 但新版支援,可是當你升級到 grpcio 最新版,可能 Python 版本又太舊,當你把 Python 升上去後,又發現程式裡面有些語法太舊要改動。
- 總體來說,我不覺得這是 M1 的問題,這算是你遲早要面對的問題,工程師總是遲早要面對升版本、被相依炸的問題,就算不用 M1 你也遲早要處理這類問題。