6
votes

Variable non définie de l'importation lors de l'utilisation de tampons de protocole dans PYDEV

J'ai un projet PYDEV qui utilise des tampons de protocole. Les fichiers de tampon de protocole sont situés dans un fichier zip généré par le compilateur Protoc. Tout fonctionne lorsque j'exécute le programme, Toutefois, PYDEV rapporte la "variable non définie de l'importation" pour chaque constante de dénombrement. Donc, par exemple:

import model_pb2

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


0 commentaires

3 Réponses :


0
votes

Avez-vous essayé d'ajouter "Model_PB2" à vos produits forcés? Voir: http://pydev.org/manual_101_project_conf2.html pour plus de détails.


1 commentaires

Est-il possible d'examiner ce fichier zip avec le code source pour voir ce qui peut se produire?



1
votes

J'ai trouvé qu'utilisé pour des produits, comme cela peut fonctionner, mais uniquement si tous les fichiers de proto sont dans un séparé situé dans une bibliothèque externe (voir http://pydev.org/manual_101_project_conf2.html ).

Cela devrait fonctionner:

  1. Déplacez (ou décompressez) les fichiers de proto compilés, y compris Model_PB2.py dans un répertoire en dehors du projet PYDEV.
  2. Ajoutez un fichier __init__.py vide sur le même répertoire que modèle_pb2.py pour vous assurer qu'il peut être importé en tant que bibliothèque.
  3. en Eclipse, allez à Windows -> Préférences -> Pydev -> Interprète
  4. ajoutez le répertoire avec modèle_pb2.py aux bibliothèques.
  5. Ajouter Model_PB2 aux constructions forcées.

    Si vous n'êtes pas accro à l'autocomplete, vous pouvez utiliser CTRL + 1 pour ignorer ces erreurs plutôt comme décrit dans cette réponse . Cela a été testé avec Eclipse Kepler et Pydev 2.8.


0 commentaires

1
votes

J'ai rencontré ce problème avec Protobuf 2.6.1 et PYDEV 4.5.5. J'ai essayé les suggestions ci-dessus, aucun d'entre eux n'a aidé dans mon cas. Ce qui a fini par se débarrasser des erreurs «une variable non définie» lors de l'utilisation de Protobuf Enums était simple:

Accédez à l'ENUM sur un objet Protobuf instancié plutôt que sur le module Protobuf.

Je ne sais pas si cela pouvait être appliqué au cas d'utilisation de l'OP, mais dans la mienne, c'était aussi simple que: xxx


0 commentaires