运行 python3 -c "import platform; print(platform.machine())",若输出 arm64 则为原生版本,x86_64 则为 Rosetta 2 转译;推荐用 Homebrew(/opt/homebrew)安装,并验证 IDE 解释器路径及 base_prefix 指向。

确认当前 Python 是否为 arm64 原生版本
很多用户装完 Python 后直接用 python3 --version,但看不出架构。真正关键的是运行 python3 -c "import platform; print(platform.machine())" —— 如果输出是 arm64,说明是原生;若为 x86_64,大概率是 Rosetta 2 转译运行,性能会打七折以上。
常见错误现象:用 Homebrew 安装 python 包时没指定架构、或从 python.org 下载了 Intel 版安装包、或通过 pyenv 安装时未启用 universal2 支持,都会导致 x86_64 版本混入。
- 检查 Homebrew 是否已适配 arm64:
arch命令应输出arm64,且brew config中Chip显示Apple M1或M2 - 卸载非 arm64 的 Python:先查路径
which python3,再确认是否在/opt/homebrew/bin/(arm64)还是/usr/local/bin/(大概率 Intel) - 不要依赖系统自带的
/usr/bin/python3—— 它是只读的、版本老旧、且 Apple 明确不保证兼容性
用 Homebrew 安装 arm64 原生 Python(推荐方式)
Homebrew for Apple Silicon 默认安装 arm64 二进制,只要确保你装的是官方 arm64 Homebrew(路径为 /opt/homebrew),brew install python 就会拉取 arm64 原生包,包括 pip、setuptools 和 venv 全套工具链。
注意:Homebrew 的 python 包实际安装的是 python3,且不会覆盖系统 python(不存在的别名),所以无需担心冲突。
立即学习“Python免费学习笔记(深入)”;
- 安装前清空旧配置:
rm -rf ~/.pyenv(如果之前用过 pyenv 且未适配 arm64) - 确保
/opt/homebrew/bin在$PATH最前面:echo $PATH应看到它排在/usr/bin之前 - 验证安装结果:
python3 -c "import sys; print(sys.version_info, sys.base_prefix)"——base_prefix应指向/opt/homebrew/... - 升级 pip 时用
python3 -m pip install -U pip,避免用pip install -U pip(可能调用错解释器)
PyPI 包编译失败?优先检查 wheel 是否支持 arm64
不少科学计算包(如 numpy、pandas、scipy)在 M1/M2 上报 clang: error: unsupported option '-fopenmp' 或卡在 building 'xxx' extension,本质是源码编译时缺少 arm64 wheel 或未启用 Universal 2 构建。
根本解法不是硬改编译参数,而是让 pip 优先下载预编译 wheel —— 这要求包作者已发布 arm64 支持版本(2022 年后主流包基本都已支持)。
- 升级 pip 到 22.3+:
python3 -m pip install -U pip(新版 pip 默认启用--only-binary=:all:对 arm64 友好) - 安装前加
--only-binary=all强制跳过编译:pip install --only-binary=all numpy - 若仍失败,检查包是否真有 arm64 wheel:pypi.org 页面下拉看 .whl 文件名,含
macosx_11_0_arm64或universal2即可 - 避开坑:不要手动装 OpenMP(
brew install libomp+ 环境变量)—— 多数新 wheel 已静态链接,加了反而干扰
VS Code / PyCharm 中解释器路径选错,导致调试器跑在 Rosetta 下
IDE 默认可能沿用旧路径(比如 /usr/local/bin/python3),即使终端里 python3 是 arm64,IDE 内部仍可能启动 x86_64 解释器,表现为:CPU 占用高、debugger 启动慢、ps aux | grep python 显示 intel 字样。
这不是 IDE Bug,而是环境变量继承问题 —— GUI 应用(如 VS Code)不自动加载 shell 的 $PATH,尤其当你用 zsh 配置了 PATH,但 Launch Services 没刷新。
- VS Code:Cmd+Shift+P → “Python: Select Interpreter” → 手动定位到
/opt/homebrew/bin/python3 - PyCharm:Preferences → Project → Python Interpreter → ⚙️ → Add → System Interpreter → 选
/opt/homebrew/bin/python3 - 终极验证:在 IDE 的 Python Console 中执行
import platform; platform.machine(),必须返回arm64 - 如果仍不行,重启 Dock:
killall Dock(强制 GUI 进程重读 shell 配置)
Arm64 原生 Python 的最大收益不在“能跑”,而在内存带宽和 NPU 协同潜力——比如 torch.compile 在 M2 Ultra 上开启 fullgraph 后,某些模型推理延迟下降 40%,但这前提是整个工具链(Python + torch + numpy)全 arm64,漏掉一个环节,就退回 Rosetta 的单核模拟状态。



















