You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac上Python3.7环境下用Poetry安装Numpy报EnvCommandError

M1 Mac + Python 3.7 + Poetry 环境下安装Numpy失败问题

问题描述

在M1 Mac的Python 3.7 Poetry环境中安装Numpy时,反复出现EnvCommandError,无法构建wheel,且遇到clang不支持-march=native参数的错误。

已尝试方案

  • 通过Rosetta启动终端,使用pip加x86架构参数安装
  • 通过Rosetta启动终端,使用Poetry安装
  • 用Brew安装OPENBlas并设置路径后尝试安装
  • 克隆Numpy源码,使用--no-binary和--no-pep517参数安装
  • 更新至最新版本的Poetry后尝试安装

错误信息

警告:尝试进行相对导入,但未知父包
/private/var/folders/g8/n76149jx1_s8bmqh02_lsmnh0000gp/T/pip-build-env-9yu5k12r/overlay/lib/python3.7/site-packages/setuptools/_distutils/dist.py:275: 用户警告:未知的分发选项:'define_macros'
  warnings.warn(msg)
错误:命令 "clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/opt/homebrew/opt/openssl@3/include -DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -DNO_ATLAS_INFO=3 -DHAVE_CBLAS -Ibuild/src.macosx-12.2-arm64-3.7/numpy/core/src/common -Ibuild/src.macosx-12.2-arm64-3.7/numpy/core/src/umath -Inumpy/core/include -Ibuild/src.macosx-12.2-arm64-3.7/numpy/core/include/numpy -Ibuild/src.macosx-12.2-arm64-3.7/numpy/distutils/include -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -Inumpy/core/src/_simd -I/Users/maxnguyen/Library/Caches/pypoetry/virtualenvs/dataflow-ieQly66s-py3.7/include -I/Users/maxnguyen/.pyenv/versions/3.7.12/include/python3.7m -Ibuild/src.macosx-12.2-arm64-3.7/numpy/core/src/common -Ibuild/src.macosx-12.2-arm64-3.7/numpy/core/src/npymath -c build/src.macosx-12.2-arm64-3.7/numpy/core/src/umath/loops_unary_fp.dispatch.c -o build/temp.macosx-12.2-arm64-3.7/build/src.macosx-12.2-arm64-3.7/numpy/core/src/umath/loops_unary_fp.dispatch.o -MMD -MF build/temp.macosx-12.2-arm64-3.7/build/src.macosx-12.2-arm64-3.7/numpy/core/src/umath/loops_unary_fp.dispatch.o.d -I/System/Library/Frameworks/vecLib.framework/Headers" 执行失败,退出状态码1
[输出结束]

注意:此错误源自子进程,大概率不是pip的问题。
ERROR: 构建numpy的wheel失败
构建numpy失败
ERROR: 无法为numpy构建wheel,而这是安装基于pyproject.toml的项目所必需的


在 ~/.poetry/lib/poetry/utils/env.py:1195 中的 _run 方法
    1191│                 output = subprocess.check_output(
    1192│                     cmd, stderr=subprocess.STDOUT, **kwargs
    1193│                 )
    1194│         except CalledProcessError as e:
→ 1195│             raise EnvCommandError(e, input=input_)
    1196│ 
    1197│         return decode(output)
    1198│ 
    1199│     def execute(self, bin, *args, **kwargs):

解决建议

  1. 指定兼容M1的Numpy版本
    Python3.7在M1上没有官方预编译的高版本Numpy wheel,尝试安装numpy==1.21.6(这是最后一个支持Python3.7且兼容arm64的稳定版本)。在pyproject.toml中指定版本后执行:
poetry lock && poetry install
  1. 强制使用预编译wheel
    设置环境变量让pip优先获取预编译包,在终端执行:
export PIP_ONLY_BINARY=numpy
poetry install

若通过Rosetta运行,需确保环境变量在x86架构终端中生效。

  1. 禁用-march=native编译参数
    创建或修改~/.numpy-site.cfg文件,添加以下内容:
[atlas]
atlas_libs =
[lapack]
lapack_libs =
[blas]
blas_libs =

同时设置编译环境变量后重新安装:

export CFLAGS="-arch arm64 -O3 -Wno-unused-result"
export CXXFLAGS="-arch arm64 -O3 -Wno-unused-result"
poetry install
  1. 用pyenv配合Rosetta管理x86架构Python3.7
    确保使用纯x86环境安装和运行:
  • 用Rosetta打开终端
  • 安装x86版本的pyenv:arch -x86_64 brew install pyenv
  • 安装x86架构的Python3.7:arch -x86_64 pyenv install 3.7.12
  • 设置本地环境为该版本:pyenv local 3.7.12
  • 重新创建Poetry虚拟环境:poetry env use $(which python),再执行poetry install

内容的提问来源于stack exchange,提问作者mx-ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:30:57