web-dev-qa-db-fra.com

Obtenir le module 'google.protobuf.descriptor_pool' n'a pas d'attribut 'Default' dans mon python script

Je suis nouveau sur python et j'utilisais un script python écrit par quelqu'un d'autre. Je l'exécutais correctement sur un autre PC. Il me suffisait d'installer coupe de packages comprenant pip3, google-cloud, google-cloud-bigquery et pandas.

Maintenant, lorsque j'ai installé les mêmes packages sur un autre PC, je ne parviens pas à exécuter le script. L'erreur suivante s'affiche en premier:

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

Cependant, lorsque dans les packages purgés/réinstallés/mis à jour et que les packages protobuf3 et protobuf-py3 ont également été ajoutés, l'erreur a été mise à jour avec le message suivant:

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'

.Toute aide ou piste sera appréciée

5
Mobeen

En fait, j'ai rencontré un cas similaire, nous avions 2 packages installés protobuf et python3-protobuf. En fait, je ne connais pas la cause profonde de cela, mais apparemment, quand vous faites cela:

pip install protobuf
pip install python3-protobuf

cette erreur que vous avez décrite se produit, on dirait que cela vous donne une version différente, comme si ces deux packages ont des fichiers qui se chevauchent et qu'ils se remplacent l'un l'autre ou quelque chose du genre.

la solution pour moi était simplement d'inverser l'ordre d'installation (assurez-vous de les désinstaller d'abord):

pip install python3-protobuf
pip install protobuf

ou juste

pip install python3-protobuf protobuf

j'espère que cela aide n'importe qui ici.

0
Amit Maimon