Why do I see "cannot import name descriptor_pb2" error when using Google Protocol Buffers?

18,151

Solution 1

I believe you have to generate descriptor_pb2.py with protoc yourself:

protoc descriptor.proto --python_out=gen/

gen/ is a folder with generated python classes.

After that, the following works just fine:

sys.path.append('../gen')
from descriptor_pb2 import FileDescriptorSet

../gen/descriptor_pb2.py must exists.

Solution 2

In my case, not finding descriptor_pb2 occurred because protobuf wasn't correctly installed. In the python subdirectory of protobuf, be sure to run

python setup.py build
python setup.py test
python setup.py install (as root)

Solution 3

Please make sure to install the protobuf runtime library as directed in the readme file. You cannot simply use the source directly out of the package, since descriptor_pb2.py needs to be generated by protoc (the protobuf compiler) as part of the installation process.

Solution 4

I use python 2.7 on windows 10.

In my case, I have downloaded protoc-3.0.0-beta-2-win32 from https://github.com/google/protobuf/releases and copied the binary protoc file to src folder.

after that I have run the command python setup.py build and the descriptor_pb2 was generated.

Share:
18,151
Nick Bolton
Author by

Nick Bolton

Hello, I'm the CEO of Symless, the company behind Synergy, software that lets you share one mouse and keyboard between multiple computers.

Updated on June 22, 2022

Comments

  • Nick Bolton
    Nick Bolton almost 2 years

    When using the generated Python code from our protobuf classes, we get this error:

    cannot import name descriptor_pb2
    

    The equivalent C++ generated code works just fine, so it would appear that there is no problem with our actual proto definitions.

    This error occurs when I try and import our class, like so:

    import sys
    sys.path.append('..\path\to\generated')
    sys.path.append('..\contrib\protobuf\python')
    
    from foobar_pb2 import FooBar
    

    Is it correct to append the system paths?

    I checked in the protobuf\python\google\protobuf directory for descriptor_pb2.py but only found descriptor.py - we're using the latest version, so I assume we don't have any files missing.

    Does anyone know what the solution is?

  • Devi Kiran
    Devi Kiran almost 11 years
    Even though after generating the descriptor_pb2.py file i am getting an error which saying that descriptor_pb2 is referring it self in its import any idea how to solve it
  • teeks99
    teeks99 over 6 years
    You can also just stop after the python setup.py build step and point to the build/lib directory.