树莓派Python3.5运行TensorFlow脚本报错求助
解决树莓派Python3.5中TensorFlow跨版本安装后的符号缺失错误
首先,你遇到的这个NotFoundError里的未定义protobuf符号问题,核心原因是你把为Python3.4编译的TensorFlow包强行安装到了Python3.5环境中,导致底层依赖的原生扩展(比如_prefetching_ops.so)和当前Python环境、系统库的兼容性不匹配。那个教程提到的“导入有警告但可正常运行”,只适用于TensorFlow的基础核心功能,而tf.contrib模块里的很多组件依赖特定版本的编译符号,跨版本安装就会触发这类错误。
下面给你几个可行的解决方向:
1. 降级Python到3.4,使用对应版本的预编译包
这是最贴合那个教程思路的解决方案:
- 在树莓派上安装Python3.4,确保系统里的
pip3.4可用 - 直接使用教程里的Python3.4版本TensorFlow wheel包进行安装,命令类似:
pip3.4 install tensorflow-1.x.x-cp34-none-linux_armv7l.whl - 这样安装后,虽然导入时可能还是会有版本不匹配的警告,但
tf.contrib模块的原生扩展能找到正确的依赖符号,不会出现NotFoundError。
2. 替换为Python3.5兼容的TensorFlow预编译包
现在社区有很多针对树莓派Python3.5的第三方预编译TensorFlow包,不需要自行编译:
- 找到对应你树莓派型号(比如ARMv7/ARM64)的Python3.5版本TensorFlow wheel
- 用
pip3.5直接安装这个包,替换掉当前的跨版本安装的TensorFlow - 这类预编译包是专门针对Python3.5编译的,能完美兼容
contrib模块的所有功能,彻底解决兼容性问题。
3. 规避使用tf.contrib.learn.Estimator,改用核心API
如果不想调整Python版本或者找新的包,可以尝试重构代码,绕开有问题的contrib模块:
- 把原来基于
tf.contrib.learn.Estimator的代码,改成用TensorFlow核心API手动构建模型:- 直接定义网络层、损失函数、优化器
- 使用
tf.Session来执行训练和预测流程
- 这种方式能避开加载
tf.contrib.data里的_prefetching_ops.so这类依赖特定编译符号的扩展,从而解决报错问题。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

