2012-06-30 12 views
6

Tengo un proyecto de PyDev que utiliza búferes de protocolo. Los archivos de búfer de protocolo se encuentran en un archivo zip generado por el compilador de protocolos. Todo funciona cuando ejecuto el programa, sin embargo PyDev informa "Variable no definida de la importación" para cada constante de enumeración. Así, por ejemplo:Variable indefinida de la importación cuando se utilizan los búferes de protocolo en PyDev

import model_pb2 

value = model_pb2.Expression(type = model_pb2.Expression.PARAMETER) 

Se informa de la constante de enumeración "PARÁMETROS" como una variable no definida. Hay varias docenas de errores similares en mi programa, y ​​me gustaría corregirlos "correctamente" (es decir, no simplemente suprimiendo la advertencia).

Respuesta

0

¿Ha intentado agregar "model_pb2" a sus builtins forzados? Ver: http://pydev.org/manual_101_project_conf2.html para más detalles.

+0

No, eso no ayuda. – Talin

+0

¿Es posible echar un vistazo a ese archivo zip con el código fuente para ver qué puede estar pasando? –

1

Encontré que el uso de edificios como puede funcionar, pero solo si todos los archivos proto están en un lugar separado ubicado en una biblioteca externa (ver http://pydev.org/manual_101_project_conf2.html).

esto debería funcionar:

  1. Mover (o descomprimir) los archivos compilados proto incluyendo model_pb2.py en un directorio fuera del proyecto pydev.
  2. Agregue un archivo __init__.py vacío al mismo directorio que model_pb2.py para garantizar que se pueda importar como una biblioteca.
  3. En eclipse, vaya a Windows -> Preferencias -> pydev -> Intérprete
  4. Agregue el directorio con model_pb2.py a las Bibliotecas.
  5. Agregue model_pb2 a las buildins forzadas.

Si no es adicto a la autocompletar, puede usar ctrl + 1 para ignorar estos errores en su lugar as described in this answer. Esto se probó con Eclipse Kepler y pydev 2.8.

0

Encontré este problema con protobuf 2.6.1 y PyDev 4.5.5. Intenté las sugerencias anteriores, ninguno de ellos ayudó en mi caso. Lo que terminó por deshacerse de los errores de la 'variable indefinida' al usar protobuf enums fue simple:

Acceda a enum en un objeto protobuf instanciado en lugar de en el módulo protobuf.

no estoy seguro de si esto podría aplicarse a casos de uso de la OP, pero en la mía era tan fácil como:

from myprotobuf_module import SomeProtobufMessage 

some_protobuf_object = SomeProtobufMessage() 
some_enum = some_protobuf_object.SOME_ENUM 
Cuestiones relacionadas