TypeError: los descriptores no se pueden crear directamente

6 minutos de lectura

avatar de usuario
hasu33

traté de instalar Rayopero dio un error:

TypeError: Descriptors cannot not 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).

Intenté resolver el problema y bajé de categoría Protobuf:

Name: protobuf
Version: 3.20.0
Summary: Protocol Buffers
Home-page: https://developers.google.com/protocol-buffers/
Author:
Author-email:
License: BSD-3-Clause
Location: d:\opencv\lib\site-packages
Requires:
Required-by: ray, tensorboard, tensorflow

Pero aún así el problema persiste en Ray, TensorFlowy Keras. Mi aplicación ya no funciona. ¿Cómo puedo arreglarlo?

avatar de usuario
Kushan Gunasekera

A veces el Protobuf El paquete podría instalarse sin su participación. Para ello, tienes dos soluciones a aplicar. Pruebe una de las siguientes soluciones y debería funcionar.

Solución 1:

Puede degradar la Protobuf enchufar,

pip install protobuf==3.20.*

O puede agregarlo a la requirements.txt archivo como el último paquete. Porque esto anulará el instalado previamente Protobuf paquete.

...
protobuf==3.20.*

Solución 2:

Puede establecer la siguiente variable de entorno.

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

según la descripción del error, esto podría afectar el rendimiento de su programa.

pero esto utilizará el análisis de Python puro y será mucho más lento


Referencias:

  • Después de seguir la solución 01 y la solución 02, ambas dan como resultado que mi programa se ejecute ~5 veces más lento. También traté de reconstruir el entorno y todavía funciona tan lento. Mi suposición es que algo está forzando PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python incluso cuando uso la solución 01, pero no tengo forma de verificarlo. ¿Le está pasando a alguien más? ¿Cómo podría volver al estado original?

    – Guillem

    14 de junio a las 15:52

  • Tiene razón @Guillem, la Solución 02 podría afectar el rendimiento de su programa y también lo mencionaron en la descripción del error. Pero la Solución 01 debería funcionar

    – Kushan Gunasekera

    15 de junio a las 10:28

  • La cuestión es que la Solución 01 también está afectando el rendimiento. Incluso traté de reinstalar conda pero el código no se ejecutará tan rápido como antes.

    – Guillem

    15 de junio a las 11:46

  • @Guillem no puede ser, hice lo mismo y no pude identificar ningún problema de rendimiento en mi programa. Lo lamento.

    – Kushan Gunasekera

    15 de junio a las 13:51

avatar de usuario
DrEmmettBrownJr

Alternativamente, pude actualizar a wandb==0.12.17y todo parece estar funcionando.

Viejo (no funciona):

  - pip:
      - wandb==0.10.21

Nuevo (en funcionamiento):

  - pip:
      - wandb==0.12.17

avatar de usuario
jeremyjohn

en mi caso no tenia protobuf explícitamente en mi requirements.txt archivo, pero tenía una dependencia relacionada que aparentemente era problemática:

googleapis-common-protos==1.6.0 # Depends on protobuf

eliminando esto permitió la posterior pip install -e . (asumiendo setup.py está presente) para ir con lo que sea google-api-core==1.13.0 tenía para las dependencias. Eso resultó en la instalación de googleapis-common-protos==1.56.2 y resolvió el error.

avatar de usuario
Yumnam_jr Mangang

Los descriptores no se pueden crear directamente:

  1. Necesitamos degradar el paquete protobuf de 4.21.2 a 3.20.1.
  2. Ir a configuración → ProyectoIntérprete de Python → instalar protobuf 3.20.1 (especificar versión)

avatar de usuario
Jirayu Kaewprateep

Encontré el mismo problema, pero seguí las instrucciones en esta página web:

Guía del usuario de empaquetado de Python (en GitHub)

Pasos

Requisitos / requisitos previos:

  1. esfinge 4.3.1

  2. esfinge-autoconstrucción 0.7.1

  3. sphinx-inline-tabs 2021.4.11b9

  4. python-docs-tema 2021.5

  5. sphinx-copybutton 0.4.0

  6. Salida de python -V:

    Pitón 3.8.10

  7. Salida de protoc.exe --version:

    libprotoc 3.21.0-rc2

Instalación:

  1. pip install git+https://github.com/pypa/pypa-docs-theme.git#egg=pypa-docs-theme

  2. compilar bibliotecas

  3. Copie la biblioteca compilada de F:\temp\Python\protoc\packaging.python.org\protobuf\Debug a F:\temp\Python\protoc\packaging.python.org\protobuf\src

Producción:

installing library code to build\bdist.win-amd64\egg
running install_lib
running build_py
creating build\lib.win-amd64-3.8
creating build\lib.win-amd64-3.8\google
copying google\__init__.py -> build\lib.win-amd64-3.8\google
creating build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\any_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\api_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\descriptor.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\descriptor_database.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\descriptor_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\descriptor_pool.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\duration_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\empty_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\field_mask_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\json_format.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\message.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\message_factory.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\proto_builder.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\reflection.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\service.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\service_reflection.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\source_context_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\struct_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\symbol_database.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\text_encoding.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\text_format.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\timestamp_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\type_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\unknown_fields.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\wrappers_pb2.py -> build\lib.win-amd64-3.8\google\protobuf
copying google\protobuf\__init__.py -> build\lib.win-amd64-3.8\google\protobuf

...
testTimestampSerializeAndParse (google.protobuf.internal.well_known_types_test.TimeUtilTest) ... ok
testTimezoneAwareDatetimeConversionLA (google.protobuf.internal.well_known_types_test.TimeUtilTest)
testTimezoneAwareDatetimeConversionLA([1969, 12, 31, 18], datetime.timezone(datetime.timedelta(days=-1, seconds=57600), 'US/Pacific')) ... ok
testTimezoneAwareDatetimeConversionLondon (google.protobuf.internal.well_known_types_test.TimeUtilTest)
testTimezoneAwareDatetimeConversionLondon([1970, 1, 1, 2], datetime.timezone.utc) ... ok
testTimezoneAwareDatetimeConversionTokyo (google.protobuf.internal.well_known_types_test.TimeUtilTest)
testTimezoneAwareDatetimeConversionTokyo([1970, 1, 1, 11], datetime.timezone(datetime.timedelta(seconds=32400), 'Japan')) ... ok
testTimezoneNaiveDatetimeConversion (google.protobuf.internal.well_known_types_test.TimeUtilTest) ... ok
testByteSizeFunctions (google.protobuf.internal.wire_format_test.WireFormatTest) ... ok
testPackTag (google.protobuf.internal.wire_format_test.WireFormatTest) ... ok
testUnpackTag (google.protobuf.internal.wire_format_test.WireFormatTest) ... ok
testZigZagDecode (google.protobuf.internal.wire_format_test.WireFormatTest) ... ok
testZigZagEncode (google.protobuf.internal.wire_format_test.WireFormatTest) ... ok

¿Ha sido útil esta solución?