Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pip install etcd3 does not work because of an incompatible protobuf version #2709

Open
arturo-air opened this issue Dec 20, 2024 · 0 comments

Comments

@arturo-air
Copy link

I spent a few hours trying multiple python etcd3 clients, and all failed because of protobuf. The steps were:

  1. Run pip install etcd3.
  2. Open the python interpreter.
  3. Type import etcd3.
  4. 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant