使用pip,virtualenv和cpp_representation为python安装protobuf

时间:2015-04-27 16:16:37

标签: python c++ protocol-buffers

我正在尝试安装protobuf,并且在执行我的应用时遇到错误:

import Request_pb2
  File "blablabla/Request_pb2.py", line 6, in <module>
    from google.protobuf import descriptor as _descriptor
  File "blablabla/.virtualenvs/test/local/lib/python2.7/site-packages/google/protobuf/descriptor.py", line 50, in <module>
from google.protobuf.pyext import _message
ImportError: blablabla/.virtualenvs/test/local/lib/python2.7/site-packages/google/protobuf/pyext/_message.so: undefined symbol:
 _ZTIN6google8protobuf10TextFormat17FieldValuePrinterE

我安装了协议缓冲区的c ++版本2.6.1。写作protoc --version我得到了:

libprotoc 2.6.1

然后,我使用pip和virtualenv(virtualenvwrapper)为python安装了protobuf。我写了

env CPATH=$PROTOBUF_HOME:$PROTOBUF_HOME/src LIBRARY_PATH=$PROTOBUF_HOME/.libs 
pip install protobuf 
--install-option="--cpp_implementation"

我在这里阅读:https://github.com/google/protobuf/issues/144

在我的.bashrc文件中(可从命令行访问):

export PROTOBUF_HOME=~/projects/protobuf-2.6.1

#Python Protobuf configuration.
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=2

为了以防万一,我重新编译了.proto文件,因为之前我有2.6.0版本。

这是怎么回事? 提前谢谢!

修改

ldd _message.so

返回:

linux-vdso.so.1 =>  (0x00007fff3e1f8000)
libprotobuf.so.8 => /usr/lib/x86_64-linux-gnu/libprotobuf.so.8 (0x00007f12b8a43000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f12b873f000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f12b8528000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f12b8163000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f12b7f45000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f12b7d2b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f12b7a25000)
/lib64/ld-linux-x86-64.so.2 (0x00007f12b8f81000)

看一看:

ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8

返回:

dic  9 10:51 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8 -> libprotobuf.so.8.0.0

看一看:

ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0

返回:

feb 13  2014 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0

0 个答案:

没有答案