Open
Description
I spent a few hours trying multiple python etcd3 clients, and all failed because of protobuf. The steps were:
- Run
pip install etcd3
. - Open the python interpreter.
- Type
import etcd3
. - Got an error related to protobuf.
Python 3.12.3 (main, Nov 6 2024, 18:32:19) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import etcd3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/venv/lib/python3.12/site-packages/etcd3/__init__.py", line 3, in <module>
import etcd3.etcdrpc as etcdrpc
File "/tmp/venv/lib/python3.12/site-packages/etcd3/etcdrpc/__init__.py", line 1, in <module>
from .rpc_pb2 import *
File "/tmp/venv/lib/python3.12/site-packages/etcd3/etcdrpc/rpc_pb2.py", line 16, in <module>
from etcd3.etcdrpc import kv_pb2 as kv__pb2
File "/tmp/venv/lib/python3.12/site-packages/etcd3/etcdrpc/kv_pb2.py", line 33, in <module>
_descriptor.EnumValueDescriptor(
File "/tmp/venv/lib/python3.12/site-packages/google/protobuf/descriptor.py", line 920, in __new__
_message.Message._CheckCalledFromGeneratedFile()
TypeError: Descriptors cannot 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
The solution is, either modify the requirements.txt
to force using protobuf v3, or install the library directly from the sources:
pip install git+https://github.com/kragniz/python-etcd3.git@e58a899579ba416449c4e225b61f039457c8072a
Please, I suggest pushing the latest GitHub version to Pypi. If not, other people is going to get the same error.
Metadata
Assignees
Labels
No labels