M1 Apple Silicon Mac 開發工具 Debug 筆記

朋友買了 M1 Macbook Pro,結果開發環境全炸,Python 跟 RoR 紅字到底,所以來找我幫忙,經過一個晚上的研究,讓他的 Python 專案和 RoR 專案都復活了,其實 M1 的開發環境沒有想像中那麼糟,大多數套件其實都有支援了,只是因為使用方式不一樣,很多人可能沒有正確設定,才會導致一堆錯誤訊息冒出來(例如在 M1 上面裝 Intel 版本的 Homebrew),這邊簡單筆記處理注意事項。

  1. 先把 rosetta 2 跟 xcode 裝好
    1. App Store install Xcode
    2. xcode-select –install
    3. softwareupdate –install-rosetta
  2. rosetta 2 治百病,如果不想煩惱太多的話,把 rosetta 開啟來,幾乎都可以正常運作(包含 cmd 的開發工具)
    1. 可以選擇用一般模式開 Terminal 或是 rosetta 模式(App 按右鍵,Get Info,選擇啟用 rosetta 2)(參考
      1. arch -x86_64 ${cmd}
      2. 範例: arch -x86_64 pip install
  3. brew install -s {app}
    1. -s 重新編譯模式,可能有幫助
  4. homebrew 有 arm 版本跟原版(用 rosetta 執行),如果用 arm 版安裝失敗的可以用 rosetta 執行原版的 homebrew 試試看
  5. 部分底層 Library 尚未支援 M1 ARM,例如 BoringSSL,導致我在裝 grpcio 時一直失敗,不過可以把 grpcio 使用的 SSL Library 替換成 OpenSSL 即可。
  6. 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 你也遲早要處理這類問題。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。