Search code examples
pythonpython-2.7protocol-bufferssixprotoc

AttributeError : six missing "indexbytes" when compiling protobuf with a custom python plugin


I have an issue when compiling protobuf files with a custom python plugin. On one machine it is running as expected whereas on another one this leads to following error:

 Traceback (most recent call last):
      File "C:\...\my_plugin.py", line 14, in <module>
        from google.protobuf.compiler import plugin_pb2 as plugin
      File "C:\Python27\lib\site-packages\google\protobuf\compiler\plugin_pb2.py", line 255, in <module>
        DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\034com.google.protobuf.compilerB\014PluginProtosZ\tplugin_go'))
      File "C:\Python27\lib\site-packages\google\protobuf\descriptor.py", line 869, in _ParseOptions
        message.ParseFromString(string)
      File "C:\Python27\lib\site-packages\google\protobuf\message.py", line 185, in ParseFromString
        self.MergeFromString(serialized)
      File "C:\Python27\lib\site-packages\google\protobuf\internal\python_message.py", line 1062, in MergeFromString
        if self._InternalParse(serialized, 0, length) != length:
      File "C:\Python27\lib\site-packages\google\protobuf\internal\python_message.py", line 1084, in InternalParse
        (tag_bytes, new_pos) = local_ReadTag(buffer, pos)
      File "C:\Python27\lib\site-packages\google\protobuf\internal\decoder.py", line 181, in ReadTag
        while six.indexbytes(buffer, pos) & 0x80:
    AttributeError: 'module' object has no attribute 'indexbytes'
    --my_plugin_out: protoc-gen-my_plugin: Plugin failed with status code

Both machine have the same Python version: 2.7.12.

I also made sure that they have the same Protobuf module version (3.2.0) and Six module version (1.10.0).

So I fail to understand why the "six" module would miss the "indexbytes" method required in "decoder.py" as mentionned in the callstack above.


Solution

  • I was not able to find the root cause but it seems like there was some conflicts between Python modules because using virtualenv fixed my issue. See https://virtualenv.pypa.io/en/stable/userguide/