python 如何降级protobuf

edqdpe6u  于 2023-02-18  发布在  Python
关注(0)|答案(2)|浏览(1029)

我无意中更新了ubuntu vps的protobuf,现在一些非常重要的python脚本不能用了,速度并不重要,我有两个解决办法:

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).

降级protobuf包,不确定这是否是前进的方向
或者设置PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python --但是我应该在哪里设置呢?在python脚本中?

z18hc3ub

z18hc3ub1#

使用pip降级protobuf

pip install protobuf==3.20.*

注意:上面的*不是字面上的意思,它被称为“通配符”。你可以根据需要把你自己的号码放在里面,比如3.20.13.20.5等等。
这与TypeError: Descriptors cannot not be created directly类似

92vpleto

92vpleto2#

有关背景,请参见Changes made in May, 2022
我不鼓励使用PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python作为解决方案,但是如果你想使用它,你需要在你运行代码的环境中设置这个环境变量(可能export也是这样?),这些代码使用生成的源代码(如果适用的话,包括客户端和服务器端)。
有关上述更改,请参见此thread
下面是protobuf的发布版本。
如果你不想重新编译你的protos,你可能想尝试转移到3.20.1,但要意识到这是终点,你在拖延不可避免的事情...
如果您愿意重新编译(和测试)您的protos,您应该考虑迁移到4.20.x

相关问题