Mac M1/M2芯片安装Python 3的注意事项

陆景行
陆景行
发布时间:2026-10-25| 3人浏览过
原创

在配备 Apple Silicon(M1、M2 系列)芯片的 Mac 上安装 Python 3 时,最核心的任务是确保整套开发工具链运行在原生的 arm64 架构下,避免与基于 Intel 架构的 x86_64(通过 Rosetta 2 转译)环境发生路径与二进制混用。只要理顺架构检测、Homebrew 安装路径、C 扩展库编译依赖以及虚拟环境规范,就能在 M 系列芯片上获得极高的运行效率和纯净的开发环境。

一、架构层关键点:区分原生 ARM64 与 Rosetta 2 转译

Apple Silicon 芯片采用的是 ARM64 指令集架构,而早期的 Mac 采用的是 Intel x86_64 架构。macOS 提供了 Rosetta 2 兼容层,允许 x86_64 架构的二进制文件通过动态指令翻译运行在 M1/M2 芯片上。在纯纯上层脚本执行时,Rosetta 2 或许感受不到明显差异;但在 Python 生态中,涉及大量依赖底层 C/C++ 动态链接库的扩展(如 NumPy、Pandas、Pillow 等),一旦主 Python 解释器与动态库架构不一致,就会直接触发 mach-o file, but is an incompatible architecture 的崩溃报错。

在配置前,必须通过终端指令明确当前终端的底层架构。打开 macOS 终端,执行以下命令:

uname -m

如果输出为 arm64,说明当前终端运行在 Apple Silicon 原生模式下;如果输出为 x86_64,说明终端进程被设置为了通过 Rosetta 2 打开。需要打开访达的“应用程序”目录,找到终端应用(或 iTerm2),右键查看“显示简介”,取消勾选“使用 Rosetta 打开”。

Mac M1/M2芯片安装Python 3的注意事项
图 1:Apple Silicon 原生架构与 Rosetta 2 转译架构的隔离与差异

二、路径层关键点:Homebrew 的 /opt/homebrew 与 Intel 遗留路径隔离

在 Intel 架构的 Mac 上,Homebrew 的默认安装前缀是 /usr/local。但在 Apple Silicon 芯片上,为了彻底解决架构冲突,Homebrew 官方将原生 arm64 架构的默认根目录改为了 /opt/homebrew。

这一设计保证了如果用户确实需要保留部分 x86_64 软件,两套体系可以在同一台 Mac 上共存而不会互相覆盖。但在实际配置中,容易出现以下两个常见疏漏:

  • 通过“系统迁移助手”从旧 Mac 搬迁数据:很多从 Intel Mac 换到 M1/M2 的用户,迁移助手会将旧系统的 /usr/local/bin 及其关联配置直接同步过来。如果用户的 Shell 配置文件中 /usr/local/bin 位于 /opt/homebrew/bin 之前,系统就会优先执行旧的 x86_64 版 Python,导致后续各种依赖安装异常。
  • 未正确激活 Homebrew shellenv:在新系统上安装完 Homebrew 后,必须显式将环境变量注入到当前 Shell 的配置文件中。

在基于 Zsh(macOS 默认 Shell)的环境中,标准配置方法是在 ~/.zprofile 或 ~/.zshrc 中加入以下命令:

eval "$(/opt/homebrew/bin/brew shellenv)"

配置完成后,重新加载终端或执行 source ~/.zprofile,随后通过 which python3 检查返回的路径是否为 /opt/homebrew/bin/python3。

三、安装方式选择与标准配置操作流程

在 Mac M1/M2 上安装 Python 3 主要有三种主流方式:

  1. Homebrew 安装(推荐多数开发者首选):执行 brew install python。由 Homebrew 统一维护,自动完成 arm64 编译和依赖关系链接。
  2. Python.org 官方 macOS 64-bit universal2 安装包:从 Python 官方网站下载 .pkg 安装包。Universal2 二进制格式同时包含 arm64 和 x86_64 两份机器码,能原生运行在 Apple Silicon 上。
  3. 使用 pyenv 管理多版本:适合需要同时维护多个不同 Python 小版本(如 3.9、3.10、3.12)的项目。在 M1/M2 上使用 pyenv 会在本地通过源码构建 Python,因此对底层编译器有严格要求。
避免直接依赖系统预装的 Python 存根:macOS 自带的 /usr/bin/python3 属于 Xcode Command Line Tools 的配套工具,主要供操作系统内部脚本及系统级工具调用,其版本跟随 macOS 系统更新,无法通过常规 pip 随意安装和升级包,不适合作为主开发环境。
Mac M1/M2芯片安装Python 3的注意事项
图 2:Mac M1/M2 安装 Python 3 标准步骤流程

四、依赖包构建与 C 扩展库编译注意事项

现代 Python 生态在 PyPI 上对 Apple Silicon 已经有了非常成熟的支持。大多数知名库(如 NumPy、PyTorch、SciPy、Cryptography 等)都发布了包含 macosx_..._arm64 标签的预编译二进制 Wheel 包,用户执行 pip install 即可直接解压使用,耗时极短。

然而,当遇到以下情况时,pip 会降级下载源码包(sdist)并在本地触发 C/C++ 编译器构建:

  • 安装较老版本的第三方库(在 M1 推出前发布的旧版本,没有构建 arm64 wheel)。
  • 某些特定领域的小众或私有库,未向 PyPI 提供对应 macOS arm64 的预编译文件。
  • 使用了高于官方 Wheel 支持范围的全新 Python 大版本。

在本地源码编译时,Apple Clang 默认不会自动在 /opt/homebrew 下寻找 C 库的头文件与动态库。例如安装依赖 OpenSSL 的库时,若通过 Homebrew 安装了 openssl@3,直接执行 pip install 可能会遇到类似 fatal error: 'openssl/ssl.h' file not found 的报错。

此时需要主动声明编译标志,将 Homebrew 的 include 和 lib 目录告知编译器:

export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
export CFLAGS="-I/opt/homebrew/opt/openssl@3/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@3/lib/pkgconfig"
Mac M1/M2芯片安装Python 3的注意事项
图 3:Apple Silicon 下 Python C 扩展编译与依赖链路

五、运行环境隔离:PEP 668 与虚拟环境最佳实践

在较新的 macOS 与 Homebrew 体系中,直接在全局环境中运行 pip install <package> 会遭遇 PEP 668 保护报错:error: externally-managed-environment。这是 Python 官方与包管理器为了避免破坏全局依赖引入的防护机制,切勿使用 sudo pip 强行绕过。

正确的做法是为每一个独立项目创建虚拟环境:

# 进入项目根目录
cd my_project

# 创建虚拟环境(默认基于当前解释器)
python3 -m venv .venv

# 激活虚拟环境
source .venv/bin/activate

# 此时在虚拟环境中自由使用 pip,不会污染外部系统
pip install requests pandas

在虚拟环境中,还可以通过以下一行 Python 脚本校验当前 Python 进程的实际运行架构:

python3 -c "import platform; print(platform.machine())"

控制台正常应输出 arm64。如果输出为 x86_64,说明当前使用的基础解释器来自于旧版本或 Rosetta 转译环境,需要重新检查虚拟环境的创建来源。

六、核心注意事项与常见报错排查总结

在日常使用中,绝大部分与 M1/M2 相关的 Python 问题都集中在架构与路径的混用上。下表梳理了最常见的异常表现、根本诱因与对应的标准处置方案:

异常表现与报错信息 根本原因 标准排查与修复方法
incompatible architecture (have 'arm64', need 'x86_64') 或反向 主 Python 解释器架构与加载的 C 动态库(.dylib/.so)架构不一致,通常发生在 Rosetta 终端与原生库混用时。 统一使用原生环境。检查 uname -m 确认终端为 arm64,重新在当前环境下重建虚拟环境并重装该包。
error: externally-managed-environment 符合 PEP 668 规范,系统或 Homebrew 禁止直接污染全局 Python 库目录。 使用 python3 -m venv .venv 创建项目虚拟环境,在激活的虚拟环境中运行 pip,杜绝使用 sudo pip。
fatal error: 'openssl/ssl.h' file not found 编译需要底层 C 头文件,但 Apple Clang 默认没有检索 /opt/homebrew 目录。 通过 Homebrew 安装相应依赖,并在编译前配置 LDFLAGS、CFLAGS 环境变量明确头文件路径。
which python3 指向 /usr/bin/python3 或 /usr/local/bin/python3 PATH 环境变量顺序混乱,系统自带工具或 Intel 遗留目录排在 Homebrew 之前。 在 ~/.zprofile 中加入 eval "$(/opt/homebrew/bin/brew shellenv)",确保 /opt/homebrew/bin 优先。
Mac M1/M2芯片安装Python 3的注意事项
图 4:Mac M1/M2 Python 3 安装核心注意事项总结

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。