在树莓派Ubuntu Core上构建依赖Numpy的Snap应用失败求助
解决树莓派Ubuntu Core上Snap打包Numpy的编译错误
我太懂这种ARM架构下打包Python依赖的坑了!你在x86的Ubuntu 16.04/17.10上顺利打包,是因为那些平台有预编译的Numpy wheel包,而树莓派的ARM架构需要源码编译,恰好你缺了编译依赖或者配置没到位,才会出现Running setup.py bdist_wheel for numpy ... error的问题。试试下面这几个解决方案:
1. 补全Numpy编译必需的系统依赖
Numpy源码编译需要编译器和线性代数库支持,在你的snapcraft.yaml对应part的build-packages里加上这些依赖:
parts: cavi-device-sdk: # 其他配置... build-packages: - gcc - gfortran - libblas-dev - liblapack-dev - python-dev # 如果用Python3就换成python3-dev
2. 强制pip使用源码编译(跳过wheel构建)
有时候pip默认尝试构建wheel包会在ARM环境下出兼容性问题,你可以在part的override-build里手动指定pip的安装参数,强制源码编译:
parts: cavi-device-sdk: # 其他配置... override-build: | pip install --no-binary :all: numpy # 这里继续执行你原来的构建命令,比如拷贝文件、安装其他依赖等
3. 明确指定Snap的目标架构
确保你的snapcraft.yaml顶部声明了树莓派对应的ARM架构,避免交叉编译的混乱:
name: cavi-device-snap version: '1.0' summary: Your summary here description: Your description here architectures: - armhf # 树莓派3/4如果是64位系统就用arm64
4. 试试Snapcraft远程构建
如果本地树莓派的编译资源不足或者环境有隐藏问题,用Snapcraft的远程构建功能,它会在官方的ARM容器里帮你完成编译,命令很简单:
snapcraft remote-build
这些步骤应该能解决你遇到的Numpy编译错误,本质上就是给ARM架构的编译环境补全必要工具,同时避免wheel包的兼容性问题。
内容的提问来源于stack exchange,提问作者getty23
相关产品推荐
相关产品推荐

