我有一个覆盆子3B与raspbian lite(2017-11)安装,python是3.5.2

做了以下事情:

  • apt install python3-pip

  • pip3 install tensorflow-1.6.0-cp35-none-any.whl

(从http://ci.tensorflow.org/view/Nightly/job/nightly-pi-python3/,实际上它不能直接安装,因为它是为python3.4构建的,所以我通过将cp34重命名为cp35做了一个小技巧,因为我认为这可能会起作用而且它只是做了)

之后,我测试了一些代码,它们可以正常工作(好,有一些警告...),用于hello代码甚至是线性回归代码 .

但是,当我用protobuf调用api时出现问题,例如:

import tensorflow as tf
mnist = tf.contrib.learn.datasets.load_dataset("mnist")

代码失败,出现以下错误:

文件“conv_test.py”,第3行,在mnist = tf.contrib.learn.datasets.load_dataset(“mnist”)文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/util /lazy_loader.py“,第53行,在getattr module = self._load()文件”/usr/local/lib/python3.5/dist-packages/tensorflow/python/util/lazy_loader.py“,第42行,in _load module = importlib.import_module(self.name)文件“/usr/lib/python3.5/importlib/init.py”,第126行,在import_module中返回_bootstrap._gcd_import(name [level:],package,level)文件“”,第986行,在_gcd_import文件“”,第969行,在_find_and_load文件“”,第958行,在_find_and_load_unlocked文件“”,第673行,在_load_unlocked文件“”,第673行,在exec_module文件“”,第222行,在_call_with_frames_removed文件“/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/init.py”,第33行,来自tensorflow.contrib导入数据文件“/ usr / local / lib / python3 . 5 / dist-packages / tensorflow / contrib / data / init.py“,第63行,来自tensorflow.contrib.data.python.ops.error_ops impor t ignore_errors文件“/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/data/python/ops/error_ops.py”,第20行,来自tensorflow.contrib.data.python.ops import contrib_op_loader #pylint:disable = unused-import文件“/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/data/python/ops/contrib_op_loader.py”,第24行,在resource_loader.get_path_to_datafile(“ . ./../dataset_ops.so“))文件”/usr/local/lib/python3.5/dist-packages/tensorflow/contrib/util/loader.py“,第56行,在load_op_library中ret = load_library.load_op_library(路径)文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/load_library.py”,第58行,在load_op_library中lib_handle = py_tf.TF_LoadLibrary(library_filename,status)文件“/ usr / local / lib / python3.5 / dist-packages / tensorflow / python / framework / errors_impl.py“,第516行,在退出c_api.TF_GetCode(self.status.status)中)tensorflow.python.framework.errors_impl.NotFoundError:/ USR / local / lib目录/ python3.5 / DIST-包/ tensorflow /的contrib /数据/蟒蛇/ OP s /../../ dataset_ops.so:未定义的符号:_ZN6google8protobuf8internal9ArenaImpl15AllocateAlignedEj

简单来说,张量流就抱怨它找不到protobuf提供的东西 .

ldd -r _dataset_ops.so | grep proto

未定义的符号:ZN6google8protobuf8internal9ArenaImpl15AllocateAlignedEj(./ dataset_ops.so)

......

然后,我只需通过修改代码来检查protobuf的版本:

import tensorflow as tf
import google.protobuf as pb

print(pb.__version__)
mnist = tf.contrib.learn.datasets.load_dataset("mnist")

并且

pip3 show protobuf

两个结果:3.5.2,所以我认为可能会缺少一些动态的lib(.so) . 我卸载了protobuf然后重新安装它,但没有发生任何好事,我也注意到pip3安装了以下软件包:

protobuf-3.5.2-py2.py3-none-any.whl(388kB)

不是cpython版本?也许是因为raspbian是一个32位系统?我检查了包dir for protobuf:

/usr/local/lib/python3.5/dist-packages/google/protobuf

但是在dir中没有找到任何“.so”文件,我检查了x84 64位的其他软件包,例如:

protobuf-3.5.2-cp35-cp35m-manylinux1_x86_64.whl

这个包中确实有一些“.so”文件,但是没有文件,例如:

protobuf-3.5.2-cp35-cp35m-none-any.whl

那么,我是否需要自己编译为树莓呢?或者有什么办法吗?

谢谢