Getting module 'google.protobuf.descriptor_pool' has no attribute 'Default' in my python script

爱⌒轻易说出口 提交于 2021-01-02 05:42:18

问题


I am new to python and was using a python script written by someone else. I was running it fine in a different PC. Just had to install coupe of packages including pip3, google-cloud, google-cloud-bigquery and pandas.

Now when I installed the same packages on a different PC, I am unable to run the script. It is showed the following error first:

module = 'google.protobuf.descriptor_pb2' TypeError: expected bytes, Descriptor found

However, when In purged/re-installed/updated packages and also added protobuf3 and protobuf-py3 package, The error has been updated to the following message:

from google.cloud import bigquery
  File "/home/mobeen/.local/lib/python3.6/site-packages/google/cloud/bigquery/__init__.py", line 35, in <module>
    from google.cloud.bigquery.client import Client
  File "/home/mobeen/.local/lib/python3.6/site-packages/google/cloud/bigquery/client.py", line 50, in <module>
    import google.cloud._helpers
  File "/home/mobeen/.local/lib/python3.6/site-packages/google/cloud/_helpers.py", line 33, in <module>
    from google.protobuf import duration_pb2
  File "/home/mobeen/.local/lib/python3.6/site-packages/google/protobuf/duration_pb2.py", line 8, in <module>
    from google.protobuf import symbol_database as _symbol_database
  File "/home/mobeen/.local/lib/python3.6/site-packages/google/protobuf/symbol_database.py", line 193, in <module>
    _DEFAULT = SymbolDatabase(pool=descriptor_pool.Default())
AttributeError: module 'google.protobuf.descriptor_pool' has no attribute 'Default'

.Any help or leads in this will be appreciated


回答1:


I solved the problem by uninstalling protobuf:

pip3 uninstall protobuf

pip3 uninstall python3-protobuf

NB: You should repeat this command until you get a message that there is no package named protobuf.

After that execute:

pip3 install protobuf

Install just the protobuf , don't install python3-protobuf

Hope this solution can help you.




回答2:


Did you try this too?

"I solved the problem of showed Attribute Error: 'module' object has no attribute 'Default' when import tensorflow after installed by delete redundant protobuf file.

The reason is some google/protobuf/descriptor_pool.py do not have a 'Default' defined. This usually happened at old version of protobuf so I upgraded successfully, but problem not solved. And by checking PATH and search about 'google/protobuf', I found it existed in both "/usr/local/lib/python2.7/dist-packages/google/protobuf/" and "/usr/lib/python2.7/dist-packages/google/protobuf/". Previous one have attribute 'Default' but the second one not. I tried import google.protobuf and google.protobuf.file, It shows '/usr/lib/python2.7/dist-packages/google/protobuf/init.pyc'. I deleted /usr/lib/python2.7/dist-packages/google/protobuf and tried to import tensorflow, worked."




回答3:


Actually I've ran into a similar case, we had 2 packages installed protobuf and python3-protobuf. I actually dont know the root cause for this but apparently when you do that:

pip install protobuf
pip install python3-protobuf

that error you described is happening, looks like it gives you some different version, like those two packages have overlapping files, and they override each other or something.

the solution for me was simply to reverse the installation order (make sure to uninstall them both first):

pip install python3-protobuf
pip install protobuf

or just

pip install python3-protobuf protobuf

hope this helps anyone here.



来源:https://stackoverflow.com/questions/59910041/getting-module-google-protobuf-descriptor-pool-has-no-attribute-default-in-m

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!