安装numpy 1.18.1编译失败报错,求解决方案
解决numpy 1.18.1编译错误(_Py_HashDouble参数不兼容问题)
方案1:匹配兼容的Python版本
numpy 1.18.1仅支持Python 2.7、3.5-3.8版本,如果你用的是Python3.9及以上,就会因为Python底层API(_Py_HashDouble)变更出现编译错误。
- 用pyenv管理多版本Python(推荐):
# 安装pyenv curl https://pyenv.run | bash # 安装Python3.8.x的稳定版(比如3.8.18) pyenv install 3.8.18 # 切换当前目录到该Python版本 pyenv local 3.8.18 # 重新安装numpy python3 -m pip install numpy==1.18.1
方案2:用预编译wheel跳过编译
不想换Python版本的话,先降级pip和setuptools到适配旧版numpy的版本,再强制使用wheel安装:
# 降级pip和setuptools python3 -m pip install pip==20.2.4 setuptools==44.0.0 # 强制使用预编译wheel安装numpy python3 -m pip install numpy==1.18.1 --only-binary :all:
如果上述命令失败,说明没有对应Python版本的官方wheel,还是得回到方案1。
方案3:手动修改源码适配高Python版本(应急用)
必须在高Python版本安装的话,修改numpy源码里的_Py_HashDouble调用:
- 下载numpy1.18.1源码包:
python3 -m pip download numpy==1.18.1 --no-binary :all: - 解压下载的tar.gz包,找到
numpy/core/src/npymath/npy_math.c.src文件,把里面的_Py_HashDouble调用修正:比如原代码是
return _Py_HashDouble(d);,如果参数类型不兼容,改成return _Py_HashDouble((double)d);;如果是参数数量问题,确保只传一个double类型参数。 - 进入解压后的目录,执行本地安装:
python3 setup.py install
内容的提问来源于stack exchange,提问作者Satya
相关产品推荐
相关产品推荐

