python 3.7使用protobuf-3.17.3版本

本文介绍了如何在Python 3.7环境中安装和使用protobuf-3.17.3库。通过详细步骤演示了从编译protobuf到在Python中安装和测试的过程,并对比了protobuf与其他序列化方法如XML、JSON在性能和空间占用上的优势。此外,文章还展示了如何创建和编译协议文件,以及在Python项目中使用生成的代码进行数据打包和解包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从前面一文里已经学会安装protobuf在VC2017里编译,有时候服务器使用python来开发,那么就需要与VC开发的客户端进行通讯,这样就需要协议进行通讯,这时候解包和打包网络协议,就得使用protobuf来进行。因此需要学会在python里安装和使用protobuf库,下面就来进行这个过程的学习。

先进到protobuf的目录:

D:\kangjin\TestZMQ\protobuf-3.17.3\python

然后再把protoc.exe拷贝到下面的目录:

D:\kangjin\TestZMQ\protobuf-3.17.3\src

然后回到D:\kangjin\TestZMQ\protobuf-3.17.3\python目录,运行下面的命令:

D:\kangjin\TestZMQ\protobuf-3.17.3\python>python setup.py build

D:\kangjin\TestZMQ\protobuf-3.17.3\python>python setup.py test

D:\kangjin\TestZMQ\protobuf-3.17.3\python>python setup.py install

这样就可以把protobuf安装到python 3.7的目录下面,这样就可以使用了。

Protobuf对比XML、Json等其他序列化的优势

protobuf 不管是处理时间上,还是空间占用上都优于现有的其他序列化方式。内存暂用是java 序列化的1

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-35-b42d4f2a0683> in <module> 1 import pandas as pd 2 import numpy as np ----> 3 import tensorflow as tf 4 5 # 1. 加载CSV文件(针对指定路径) /usr/local/lib/python3.7/site-packages/tensorflow/__init__.py in <module> 22 23 # pylint: disable=g-bad-import-order ---> 24 from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import 25 26 from tensorflow._api.v1 import app /usr/local/lib/python3.7/site-packages/tensorflow/python/__init__.py in <module> 50 51 # Protocol buffers ---> 52 from tensorflow.core.framework.graph_pb2 import * 53 from tensorflow.core.framework.node_def_pb2 import * 54 from tensorflow.core.framework.summary_pb2 import * /usr/local/lib/python3.7/site-packages/tensorflow/core/framework/graph_pb2.py in <module> 13 14 ---> 15 from tensorflow.core.framework import node_def_pb2 as tensorflow_dot_core_dot_framework_dot_node__def__pb2 16 from tensorflow.core.framework import function_pb2 as tensorflow_dot_core_dot_framework_dot_function__pb2 17 from tensorflow.core.framework import versions_pb2 as tensorflow_dot_core_dot_framework_dot_versions__pb2 /usr/local/lib/python3.7/site-packages/tensorflow/core/framework/node_def_pb2.py in <module> 13 14 ---> 15 from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2 16 17 /usr/local/lib/python3.7/site-packages/tensorflow/core/framework/attr_value_pb2.py in <module> 13 14 ---> 15 from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2 16 from tensorflow.core.framework import tensor_shape_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__shape__pb2 17 from tensorflow.core.framework import types_pb2 as tensorflow_dot_core_dot_framework_dot_types__pb2 /usr/local/lib/python3.7/site-packages/tensorflow/core/framework/tensor_pb2.py in <module> 13 14 ---> 15 from tensorflow.core.framework import resource_handle_pb2 as tensorflow_dot_core_dot_framework_dot_resource__handle__pb2 16 from tensorflow.core.framework import tensor_shape_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__shape__pb2 17 from tensorflow.core.framework import types_pb2 as tensorflow_dot_core_dot_framework_dot_types__pb2 /usr/local/lib/python3.7/site-packages/tensorflow/core/framework/resource_handle_pb2.py in <module> 39 message_type=None, enum_type=None, containing_type=None, 40 is_extension=False, extension_scope=None, ---> 41 serialized_options=None, file=DESCRIPTOR), 42 _descriptor.FieldDescriptor( 43 name=&#39;container&#39;, full_name=&#39;tensorflow.ResourceHandleProto.container&#39;, index=1, /usr/local/lib/python3.7/site-packages/google/protobuf/descriptor.py in __new__(cls, name, full_name, index, number, type, cpp_type, label, default_value, message_type, enum_type, containing_type, is_extension, extension_scope, options, serialized_options, has_default_value, containing_oneof, json_name, file, create_key) 559 has_default_value=True, containing_oneof=None, json_name=None, 560 file=None, create_key=None): # pylint: disable=redefined-builtin --> 561 _message.Message._CheckCalledFromGeneratedFile() 562 if is_extension: 563 return _message.default_pool.FindExtensionByName(full_name) TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are: 1. Downgrade the protobuf package to 3.20.x or lower. 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower). More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates
最新发布
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值