TensorFlow流式精度测试报错:_pywrap_tensorflow_internal.so未定义PyClass_Type
解决TensorFlow 1.6.0运行
generate_streaming_test_wav时的PyClass_Type未定义错误 我在Ubuntu 16.04的Python 3.5虚拟环境里装了TensorFlow 1.6.0,跟着官方音频识别文档做流式精度测试,结果运行这条命令的时候栽了:
bazel run tensorflow/examples/speech_commands:generate_streaming_test_wav
直接报了无法加载TensorFlow原生运行时的错,核心问题是:
_pywrap_tensorflow_internal.so: undefined symbol: PyClass_Type
完整的报错回溯长这样:
INFO: Running command line: bazel-bin/tensorflow/examples/speech_commands/generate_streaming_test_wav Traceback (most recent call last): File "/home/jean_lin/.cache/bazel/_bazel_jean_lin/7ec2afa2cc3b112c8391a9677667186f/execroot/org_tensorflow/bazel-out/k8-opt/bin/tensorflow/examples/speech_commands/generate_streaming_test_wav.runfiles/org_tensorflow/tensorflow/python/pywrap_tensorflow.py", line 58, in <module> from tensorflow.python.pywrap_tensorflow_internal import * File "/home/jean_lin/.cache/bazel/_bazel_jean_lin/7ec2afa2cc3b112c8391a9677667186f/execroot/org_tensorflow/bazel-out/k8-opt/bin/tensorflow/examples/speech_commands/generate_streaming_test_wav.runfiles/org_tensorflow/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module> _pywrap_tensorflow_internal = swig_import_helper() File "/home/jean_lin/.cache/bazel/_bazel_jean_lin/7ec2afa2cc3b112c8391a9677667186f/execroot/org_tensorflow/bazel-out/k8-opt/bin/tensorf...
折腾了一阵,总结出几个可行的解决方向:
1. 对齐Bazel编译的Python版本
PyClass_Type是Python 2专属的类型,Python 3已经移除了这个定义,所以大概率是Bazel默认用Python 2编译导致的版本不匹配。
你可以这么操作:
- 先把环境变量指向你的Python 3.5虚拟环境,替换成你自己的虚拟环境路径:
export PYTHON_BIN_PATH=/home/your_user/venv/bin/python3.5 export PYTHON_LIB_PATH=/home/your_user/venv/lib/python3.5/site-packages - 进入TensorFlow源码目录,重新配置编译选项:
配置过程中所有和Python相关的选项,都选择你虚拟环境里的路径,确认使用的是Python 3.5。./configure - 重新编译目标后再运行:
bazel build tensorflow/examples/speech_commands:generate_streaming_test_wav bazel run tensorflow/examples/speech_commands:generate_streaming_test_wav
2. 解决pip安装与源码编译的冲突
如果你之前用pip安装过TensorFlow,又用Bazel从源码运行目标,很容易出现依赖版本冲突。
解决步骤:
- 先卸载虚拟环境里的TensorFlow:
pip uninstall tensorflow - 回到TensorFlow源码目录,按照上面的方法重新配置编译,确保全程使用虚拟环境的Python 3.5。
3. 匹配Bazel版本
TensorFlow 1.6.0对Bazel版本有严格要求,过高或过低的版本都容易引发编译问题,官方推荐使用Bazel 0.11.0。
操作步骤:
- 卸载现有Bazel:
sudo apt-get remove bazel - 下载并安装0.11.0版本:
wget https://github.com/bazelbuild/bazel/releases/download/0.11.0/bazel_0.11.0-linux-x86_64.deb sudo dpkg -i bazel_0.11.0-linux-x86_64.deb - 再重新配置编译TensorFlow的目标。
内容的提问来源于stack exchange,提问作者Jean Lin
相关产品推荐
相关产品推荐

