M1(Apple Silicon/Darwin-arm64)下如何安装导入Scipy、Numpy、NumExpr等库
Apple Silicon(M系列芯片)原生Python数据科学包安装实操
环境前置校验
- 先确认当前Python运行在原生arm64架构下,验证命令为
python -c "import platform; print(platform.machine())",输出结果为arm64即为正确环境;如果输出x86_64,说明当前Python走了Rosetta转译路线,先调整终端和Python的架构设置再继续,否则后续所有安装操作都大概率报错 - 提前升级pip到最新版本,旧版本pip无法正确识别arm64架构的PyPI包索引,升级命令:
python -m pip install --upgrade pip
官方预编译包直装(优先推荐,无需手动编译)
- 从Python 3.9版本开始,numpy、scipy、numexpr等主流数据科学包已经在PyPI官方源提供正式的原生arm64预编译二进制,不需要依赖第三方渠道,直接执行以下命令即可完成安装:
python -m pip install numpy scipy numexpr pandas matplotlib
- 安装过程中不要随意加
--no-binary、--build类的强制编译参数,pip会自动匹配对应架构的预编译包,安装速度比本地编译快90%以上,也不会出现编译依赖缺失的报错
无预编译包时的本地编译流程
- 碰到个别早期版本未提供官方arm64预编译包的场景,再走手动编译流程:
- 先通过Mac包管理器(如Homebrew)安装编译必须的底层依赖:
brew install openblas gfortran gcc,缺少这三个依赖时,numpy、scipy的编译一定会失败 - 执行编译前设置架构编译参数,强制生成arm64架构的二进制:
export ARCHFLAGS="-arch arm64" - 针对单个包执行编译安装,比如需要本地编译numexpr时,命令为:
python -m pip install --no-binary=numexpr numexpr
- 先通过Mac包管理器(如Homebrew)安装编译必须的底层依赖:
配置pip优先使用本地编译包的方法
- 实际使用中常碰到的“pip绕过本地编译包、强行从PyPI拉取源码导致安装失败”的问题,可以通过以下几种方式解决:
- 直装本地编译好的whl文件:编译完成后直接执行
pip install <本地whl文件的完整路径>,pip检测到本地已安装对应版本的兼容包时,不会重复触发PyPI的源码拉取流程 - 指定本地包搜索路径:安装时加上
--find-links <本地whl文件存放目录>参数,pip会优先在指定的本地目录下匹配对应包的预编译/本地编译版本,匹配不到才会从PyPI拉取资源 - 完全跳过PyPI源:需要强制使用本地包时,加上
--no-index参数,pip会完全忽略公共PyPI源,只从指定的本地/自定义渠道搜索安装包,从根源避免拉取不兼容的源码包
- 直装本地编译好的whl文件:编译完成后直接执行
常见踩坑提醒
- 不要混用Rosetta转译终端、x86架构Python环境和原生arm64包,一旦出现架构不匹配,会直接触发导入失败、编译报错的问题
- 安装完成后执行一次依赖一致性检查:
python -m pip check,如果提示存在版本/架构不匹配的残留包,直接卸载对应包,重新安装原生arm64版本即可 - 不要在安装初期就全局开启pip的
--no-cache-dir选项,合理的缓存能帮pip快速识别架构匹配的预编译包,减少错配概率
内容的提问来源于stack exchange,提问作者MattiSG
相关产品推荐
相关产品推荐

