‘h5py/h5t/H5PY_OBJ.pxd‘ not found

1 背景

这个问题是在安装arm机器上编译好的python包tensorflow==2.6.5的wheel文件遇到。

背景是官方tensorflow==2.6.5没有提供arm架构的包,无法使用pip安装,因此需要在arm机器上自己编译wheel文件。而在安装编译好了的wheel文件的时候,pip会安装依赖,包括h5py这个包,pip会编译h5py包,从而导致错误。如下:

2 原因

官方的解释是h5py低版本只能用Cython==0.29.xx版本编译,不能用3.xx.xx版本,否则会导致编译错误。

参考:https://github.com/h5py/h5py/issues/2300

3 解决办法

既然Cython版本不对,那么思路就是编译h5py的时候指定正确Cython版本,刚开始在安装tensorflow之前,先提前安装指定版本的Cython库,发现仍然还有问题,提前安装的Cython不生效。pip在编译安装的时候,会在独立的环境中拉去Cython,也就是说我们通过pip提前安装Cython是无意义的

正确办法:

我们发现安装tensorflow==2.6.5的时候,安装的h5py依赖版本是3.1.0,我们从h5py-3.1.0.tar.gz下载h5py的源码包,将源码包解压,打开setup.py文件,如下:

我们发现这里定义了安装时依赖的Cython版本。在Cython 3.xx.xx版本还没出来的时候,这个版本限制是没有问题的,但是Cython 3.xx.xx出来后,这里就会拉到3.xx.xx的版本,导致编译出错。

因此,我把版本限制改为如下:

重新打包为h5py-3.1.0-new.tar.gz,我们在安装tensorflow之前提前安装新的h5py包。执行如下命令:

pip install h5py-3.1.0-new.tar.gz

 安装完后再安环tensorbord,完美解决。

4 总结

核心原因就是h5py-3.1.0的setup.py文件对Cython的版本限制不够严谨,只考虑到版本必须大于某个版本的情况。在3.x.x版本没出来之前,没有问题,但是3.x.x版本出来后,由于3.x.x不向下兼容,导致问题发生。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值