2012-06-30 9 views
6

Mam projekt PyDev, który wykorzystuje bufory protokołów. Pliki bufora protokołu znajdują się w pliku zip generowanym przez kompilator protokołu. Wszystko działa po uruchomieniu programu, jednak PyDev zgłasza "Niezdefiniowaną zmienną z importu" dla każdej stałej wyliczeniowej. Na przykład:Niezdefiniowana zmienna z importu podczas korzystania z buforów protokołu w PyDev

import model_pb2 

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

Podaje stałą enum "PARAMETER" jako niezdefiniowaną zmienną. W moim programie występuje kilkadziesiąt podobnych błędów i chciałbym je naprawić "poprawnie" (tj. Nie tylko po prostu pomijając ostrzeżenie).

Odpowiedz

0

Czy próbowałeś dodać "model_pb2" do swoich wymuszonych poleceń wbudowanych? Aby uzyskać szczegółowe informacje, patrz: http://pydev.org/manual_101_project_conf2.html.

+0

Nie, to nie pomoże. – Talin

+0

Czy można obejrzeć plik ZIP z kodem źródłowym, aby zobaczyć, co się dzieje? –

1

Znalazłem, że używanie dla wbudowanych jako może działać, ale tylko wtedy, gdy wszystkie pliki proto znajdują się w osobnej lokalizacji w zewnętrznej bibliotece (patrz http://pydev.org/manual_101_project_conf2.html).

To powinno działać:

  1. Move (lub rozpakować) skompilowane pliki proto tym model_pb2.py do katalogu zewnętrznego projektu PyDev.
  2. Dodaj pusty plik __init__.py do tego samego katalogu, co model_pb2.py, aby upewnić się, że można go zaimportować jako bibliotekę.
  3. W Eclipse przejdź do Windows -> Preferencje -> pydev -> Tłumacz
  4. Dodaj katalog z modelem_pb2.py do Biblioteki.
  5. Dodaj model_pb2 do wymuszonych buildin.

Jeśli nie jesteś uzależniony od autouzupełniania, możesz użyć kombinacji klawiszy CTRL + 1, aby zignorować te błędy, zamiast: as described in this answer. Zostało to przetestowane w Eclipse Kepler i pydev 2.8.

0

Napotkałem ten problem z protobuf 2.6.1 i PyDev 4.5.5. Wypróbowałem powyższe sugestie, żadne z nich nie pomogło w moim przypadku. To, co zakończyło się pozbyciem się błędów "niezdefiniowanej zmiennej" podczas korzystania z wyliczeń protobuf było proste:

Uzyskaj dostęp do wyliczenia na instancjonowanym obiekcie protobuf, a nie na module protobuf.

Nie jestem pewien, czy to może być stosowane do użytku przypadku PO, ale w kopalni było tak proste, jak:

from myprotobuf_module import SomeProtobufMessage 

some_protobuf_object = SomeProtobufMessage() 
some_enum = some_protobuf_object.SOME_ENUM