2012-06-30 14 views
6

Ho un progetto PyDev che utilizza i buffer di protocollo. I file del buffer del protocollo si trovano in un file zip generato dal compilatore protoc. Tutto funziona quando eseguo il programma, tuttavia PyDev segnala "Variabile non definita dall'importazione" per ogni costante di enumerazione. Così, per esempio:Variabile non definita dall'importazione quando si utilizzano i buffer di protocollo in PyDev

import model_pb2 

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

Si segnala la costante enum "PARAMETRO" come una variabile non definita. Ci sono diverse decine di errori simili nel mio programma, e mi piacerebbe correggerli "correttamente" (cioè non sopprimendo semplicemente l'avviso).

risposta

0

Hai provato ad aggiungere "model_pb2" ai tuoi builtin forzati? Vedi: http://pydev.org/manual_101_project_conf2.html per dettagli.

+0

No, che non aiuta. – Talin

+0

E 'possibile dare un'occhiata a quel file zip con il codice sorgente per vedere cosa potrebbe accadere? –

1

Ho trovato che l'utilizzo per i builtin come può funzionare, ma solo se tutti i file di proto si trovano in una posizione separata in una libreria esterna (vedere http://pydev.org/manual_101_project_conf2.html).

questo dovrebbe funzionare:

  1. Move (o decomprimere) i file compilati proto compreso model_pb2.py in una directory esterna al progetto PyDev.
  2. Aggiungere un file __init__.py vuoto alla stessa directory di model_pb2.py per assicurarsi che possa essere importato come libreria.
  3. In eclissi, andare a Windows -> Preferenze -> pydev -> Interprete
  4. Aggiungere la directory con model_pb2.py alle Librerie.
  5. Aggiungi model_pb2 ai buildins forzati.

Se non si è dipendenti dalla funzione di completamento automatico, è possibile utilizzare ctrl + 1 per ignorare questi errori invece as described in this answer. Questo è stato testato con Eclipse Kepler e pydev 2.8.

0

Ho riscontrato questo problema con protobuf 2.6.1 e PyDev 4.5.5. Ho provato i suggerimenti sopra entrambi nessuno di loro ha aiutato nel mio caso. Quello che ha finito per sbarazzarsi degli errori della "variabile indefinita" quando si utilizzavano enunciati protobuf era semplice:

Accedere all'enumerazione su un oggetto protobuf istanziato anziché sul modulo protobuf.

io non sono sicuro se questo potrebbe essere applicato al caso d'uso del PO, ma nel mio era facile come:

from myprotobuf_module import SomeProtobufMessage 

some_protobuf_object = SomeProtobufMessage() 
some_enum = some_protobuf_object.SOME_ENUM 
Problemi correlati