M1 寫 python

M1 寫 python

最近工作筆電更換到新的 M1 macbook pro,但 arm 架構的 M1 CPU 在裝 python 環境上遇到不少坑,在這分享安裝步驟給大家,少走點彎路快樂享受 M1 效能爽感!

目錄

  • 1 Rosetta 2 安裝指令
  • 2 Homebrew 有分 arm 和 x86 的版本
  • 3 修改 .zshrc 區分 arm 和 x86 的套件
    • 3.1 PATH 優先尋找 arm Homebrew 安裝的套件
    • 3.2 為 x86 的 Homebrew 設定 alias
  • 4 安裝 arm + x86 python 開發環境
    • 4.1 安裝 pyenv + pyenv-virtualenv
    • 4.2 用 pyenv 安裝 python
    • 4.3 安裝 python library 時遇到的錯誤
  • 5 其他做法

Rosetta 2 安裝指令

Rosetta 沒有列在 App Store 裡,官方文件表示只有在啟動 x86 應用時才會跳對話框提示安裝。但我們可以用以下指令直接強迫安裝:

$ /usr/sbin/softwareupdate --install-rosetta --agree-to-license

Homebrew 有分 arm 和 x86 的版本

arm 版的 Homebrew 用以下指令安裝,bin 路徑在 /opt/homebrew/bin/brew

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

x86 版的 Homebrew 用以下指令安裝,bin 路徑在 /usr/local/bin/brew。其中 arch -x86_64 表示後面的指令需要跑在 Rosetta 中。

$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

x86 和 arm 的 Homebrew bin 路徑不同,推測應該是為了讓 M1 可以共存兩種版本,官方才做路徑修改。因此我們可以用 which command 確認未來透過 Homebrew 安裝的套件是哪一種版本。

/opt/homebrew/Cellar 下 => arm
/usr/local/Cellar 下 => x86

修改 .zshrc 區分 arm 和 x86 的套件

PATH 優先尋找 arm Homebrew 安裝的套件

.zshrc 中調整 PATH 環境變數,讓系統優先尋找 arm 版套件

export PATH="/opt/homebrew/bin:$PATH"

為 x86 的 Homebrew 設定 alias

.zshrc 中增加 x86 Homebrew alias,免打落落長的指令並增加區別

alias xbrew='arch -x86_64 /usr/local/bin/brew'

安裝 arm + x86 python 開發環境

安裝 pyenv + pyenv-virtualenv

立刻來安裝 arm 版 pyenv 和 pyenv-virtualenv 吧

$ brew install pyenv pyenv-virtualenv

安裝 build python 所需套件

$ brew install gcc bzip2 libffi libxml2 libxmlsec1 openssl readline sqlite xz zlib

如果需要安裝 x86 版,將上述指令的 brew 更換成 x86 alias 的 xbrew 即可。為了區別 x86 的 pyenv,亦可在 .zshrc 中增加 alias

alias xpyenv='arch -x86_64 /usr/local/bin/pyenv'

用 pyenv 安裝 python

安裝 python 就和以往相同,如

$ pyenv install 3.8.13

詳細可參考 macOS 中 Python 版本太多如何管理?試試 pyenv 吧!

建議直接安裝 3.8.10 以上的 python 節省試錯時間,最初嘗試在 x86 環境安裝 3.6 問題一堆,耗費很多時間用各種手法還是無法成功,最後只好放棄。

安裝 python library 時遇到的錯誤

symbol not found in flat namespace ‘_ffi_prep_closure’

如果用 pip 安裝套件遇到這個錯誤,此篇討論建議重裝 libffi,步驟如下:

  1. 把 pyenv-virtualenv 產生的虛擬環境,和透過 pyenv 安裝的 python 移除掉 (兩個都要清乾淨,不能鐵齒)
  2. 跑以下指令重新安裝 libffi
gem uninstall ffi
brew reinstall libffi
export LDFLAGS="-L/usr/local/opt/libffi/lib"
export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"
gem install ffi
  1. pyenv 重新安裝 python 並產生 virtualenv
  2. 再次安裝套件即可解決

2 to 3 invalid

由此篇討論得知問題是 pip 和 setuptools 版本問題導致,使用以下指令強迫安裝指定版本即可解決

$ pip install -U pip==22.0.4
$ pip install -U setuptools==56.0.0

其他做法

這邊文章提供的思路是另外建立一個由 Rosetta 啟動的 x86 shell,後續指令預設跑在 x86 下,不用加 arch -x86_64,提供給大家參考。

延伸閱讀:macOS 中 Python 版本太多如何管理?試試 pyenv 吧!

M1 寫 python

Written by J

雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。

  • 首页

    • 首页
    • 沸点
    • 课程
    • 直播
    • 活动
    • 商城 APP 插件
        • 写文章
        • 发沸点
        • 写笔记
        • 写代码
        • 草稿箱

    • M1 寫 python

      会员

白小纯的云笔记

M1 寫 python

2021年09月05日 07:32 ·  阅读 3816

前言

Python从3.9.1版本开始就可以原生态且不通过Rosetta2转译在M1芯片的Mac上运行python3了

正文

1.先查看电脑自身携带的Python版本,打开终端,查看版本应该是Python 3.8.4

2.登陆python官网:https://www.python.org/

3.下载最新版Python即可,这里最新版本为Python 3.9.7

4.等待下载完毕后,双击安装包,按照提示步骤安装即可,系统默认的python3版本即会被替换为最新的版本,退出终端,重新进入,查看即可

分类:

开发工具

标签:

Python

安装掘金浏览器插件

多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有!

前往安装

收藏成功!

已添加到「」, 点击更改