demo环境 ubuntu 16.04 , python3.5
下载安装
从 https://github.com/protocolbuffers/protobuf/releases
下载 protobuf-python-3.7.0.tar.gz 并解压 编译 并 安装
a@ubuntu:~/Desktop/myproto/protobuf-3.7.0$ ./configure
a@ubuntu:~/Desktop/myproto/protobuf-3.7.0$ make
a@ubuntu:~/Desktop/myproto/protobuf-3.7.0$ sudo make install
a@ubuntu:/usr/local/lib$ protoc --version
protoc: error while loading shared libraries: libprotobuf.so.18: cannot open shared object file: No such file or directory
报错了
a@ubuntu:/usr/local/lib$ export LD_LIBRARY_PATH=/usr/local/lib/
a@ubuntu:/usr/local/lib$ protoc --version
libprotoc 3.7.0
a@ubuntu:/usr/local/lib$ echo "export LD_LIBRARY_PATH=/usr/local/lib/" >> ~/.bashrc
a@ubuntu:/usr/local/lib$ tail ~/.bashrc
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
export PYTHONPATH=$PYTHONPATH:/home/a/Desktop/mytf/
export LD_LIBRARY_PATH=/usr/local/lib/
安装完毕好了
demo 开始
1. 新建一个d3.proto d2.proto 文件
@ubuntu:~/Desktop/myproto$ cat d3.proto
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
a@ubuntu:~/Desktop/myproto$ cat d2.proto
syntax = "proto2";
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
a@ubuntu:~/Desktop/myproto$ protoc -I=. --python_out=. ./d2.proto
a@ubuntu:~/Desktop/myproto$ ls
d2_pb2.py d2.proto d3.proto
a@ubuntu:~/Desktop/myproto$ protoc -I=. --python_out=. ./d3.proto
a@ubuntu:~/Desktop/myproto$ ls
d2_pb2.py d2.proto d3_pb2.py d3.proto
a@ubuntu:~/Desktop/myproto$
生成了d2_pb2.py d3_pb2.py 。
python代码使用
a@ubuntu:~/Desktop/myproto$ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> from d3_pb2 import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'd3_pb2'
>>> sys.path.append('/home/a/Desktop/myproto')
>>> from d3_pb2 import *
>>> sr = SearchRequest()
>>> sr.query = "my query"
>>> sr.page_number = 34
>>> sr.result_per_page
0
>>> sr.result_per_page = 40
>>> sr.IsInitialized()
True
>>> sr.__str__()
'query: "my query"\npage_number: 34\nresult_per_page: 40\n'
>>> sr.Clear()
>>> sr.__str__()
''
>>>