Comment puis-je corriger les erreurs PyDev "variable non définie à partir de l'importation"?

j'ai un projet Python utilisant PyDev dans Eclipse, et PyDev continue de générer de fausses erreurs pour mon code. J'ai un module settings qui définit une settings objet. J'importe cela dans le module b et attribue un attribut avec:

from settings import settings
settings.main = object()

dans certains de mes codes--mais pas tous, des déclarations comme:

from settings import settings
print settings.main 

... générer des messages "variable non définie à partir de l'import: main" dans le volet d'erreur du code Eclipse, même bien que le code fonctionne sans problème. Comment puis-je corriger?

127
demandé sur Chris B. 2010-01-21 23:40:49

12 réponses

pour le code dans votre projet, la seule façon est d'ajouter une déclaration disant que vous vous attendiez à ce que -- peut-être protégé par un if False de sorte qu'il ne s'exécute pas (l'analyse statique du code ne voit que ce que vous voyez, pas les informations d'exécution -- si vous avez ouvert ce module vous-même, vous n'avez aucune indication que main était attendu).

pour surmonter cela il y a quelques choix:

  1. S'il s'agit d'un module externe, c'est possibilité de l'ajouter au forced builtins pour que PyDev lance un shell qui lui permettra d'obtenir des informations d'exécution (voir http://pydev.org/manual_101_interpreter.html pour plus de détails) -- c.-à-d. la plupart du temps, PyDev importera le module dans un shell et fera une dir(module) et dir sur les classes trouvées dans le module pour présenter les complétions et faire l'analyse de code.

  2. vous pouvez utiliser Ctrl+1 (Cmd+1 Pour Mac) dans une ligne avec une erreur et PyDev vous présente une option pour ajouter un commentaire pour ignorer cette erreur.

  3. il est possible de créer un module stub et de l'Ajouter aux predefined completions ( http://pydev.org/manual_101_interpreter.html a aussi des détails à ce sujet).

147
répondu Fabio Zadrozny 2017-08-23 15:27:29

j'utilise opencv qui s'appuie sur des binaires etc donc j'ai des scripts où chaque autre ligne a cette erreur stupide. Python est un langage dynamique donc de telles occasions ne devraient pas être considérées comme des erreurs.

j'ai supprimé ces erreurs en allant à:

Window -> Preferences -> PyDev -> Editeur -> L'Analyse De Code -> Undefined -> Undefined Variable À L'Importation -> Ignorer

et c'est tout.

Il peut aussi, Fenêtre -> Préférences -> PyDev -> Editeur -> l'Analyse de Code -> Importations -> Importer introuvable -> Ignorer

46
répondu ubershmekel 2012-06-02 15:26:09

le post marqué comme réponse donne une solution, pas une solution.

Cette solution fonctionne pour moi:

  • passer à Window - Preferences - PyDev - Interpreters - Python Interpreter
  • allez à l'onglet Forced builtins 1519110920"
  • cliquez sur New...
  • tapez le nom du module ( multiprocessing dans mon cas) et cliquez sur OK

non seulement les messages d'erreur disparaîtront, les membres du module seront également reconnus.

13
répondu stenci 2015-05-21 18:43:36

j'avais un problème similaire avec un projet Eclipse/PyDev. Dans ce projet, le répertoire racine du code python est un sous-répertoire du projet.

--> MyProject
 + --> src         Root of python code
   + --> module1     A module 
   + --> module2     Another module
 + --> docs
 + --> test

quand le projet était débogué ou lancé, tout allait bien car le répertoire de travail était réglé à la bonne place. Toutefois, L'analyse du code PyDev n'a pas permis de trouver d'importations en provenance de module1 ou module2.

Solution était de modifier les propriétés du projet - > PyDev - PYTHONPATH l'article et supprimer /MyProject à partir de la source de l'onglet dossiers et ajouter /Monprojet/src de la place.

7
répondu Jules 2011-12-16 13:05:48

cela a fonctionné pour moi:

étape 1 )Suppression de l'interpréteur, reconfiguration automatique

à l'étape 2) de la Fenêtre Préférences - PyDev - Interprètes - Interpréteur Python Aller à l'onglet constructions forcées Cliquez sur Nouveau... Tapez le nom du module (malédictions dans mon cas) et cliquez sur OK

étape 3) Cliquez avec le bouton droit de la souris dans l'Explorateur de projet sur le module donnant des erreurs. Aller à PyDev - > analyse de Code.

4
répondu SJP 2016-08-19 15:45:09

j'ai eu le même problème. J'utilise Python et Eclipse sur Windows. Le code fonctionnait très bien, mais eclipse montre des erreurs partout. Après avoir changé le nom du dossier "Lib" en " lib " (C:\Python27\lib), le problème a été résolu. Il semble que si la capitalisation des lettres ne correspond pas à celle du fichier de configuration, cela posera parfois des problèmes (mais il semble que ce ne soit pas toujours le cas, car la vérification des erreurs était bonne pendant longtemps avant que les problèmes apparaissent soudainement. pour aucune raison évidente).

1
répondu Leon 2011-08-30 08:52:31

une approximation de ce que je faisais:

import module.submodule

class MyClass:
    constant = submodule.constant

dit pylint: E: 4,15: Undefined variable 'submodule' (undefined-variable)

j'ai résolu ceci en changeant mon importation comme:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

Note: j'ai aussi renommé par imported variable pour avoir un nom en majuscule pour refléter sa nature constante.

1
répondu ThorSummoner 2015-02-01 22:53:35

il est possible que vous ayez juste besoin de reconfigurer votre chemin python dans Eclipse. Voir ma réponse à une question similaire.

0
répondu oob 2017-05-23 12:18:12

dans Préférences --> PyDev --> PyLint sous arguments à passer à PyLint ajouter cette ligne:

--generated-members=objects

vous devrez faire ceci pour chaque généré . J'ai trouvé ceci sur google, mais j'ai perdu la référence.

0
répondu Mark Mikofski 2012-11-07 09:12:38

faites un clic droit dans l'Explorateur de projet sur n'importe quel module donnant des erreurs. Aller à PyDev- > supprimer les marqueurs d'erreur.

0
répondu Chet 2013-01-14 03:30:00

ma réponse n'apporte rien de nouveau, juste un exemple concret que j'ai rencontré.

import gtk.gdk

w = gtk.gdk.get_default_root_window()

PyDev a montré le message d'erreur "variable non définie de l'import: get_default_root_window () "

dans le shell python vous pouvez voir qu'il s'agit d'un module' intégré 'comme mentionné dans une réponse ci-dessus:

>>> import gtk.gdk
>>> gtk.gdk
<module 'gtk.gdk' (built-in)>

Maintenant, en vertu de la Fenêtre->Préférences->PyDev->Interprètes->Interpréteur Python, je sélectionnez l'onglet ' Forced Builtins 'et ajoutez' gtk.gdk " à la liste.

maintenant le message d'erreur ne s'affiche plus.

0
répondu chrimuelle 2014-07-23 16:47:02

je trouve que ces 2 étapes travaillent pour moi tout le temps:

  1. confirmez (sinon ajoutez) le dossier parent du module dans PYTHONPATH.
  2. ajouter le nom complet du module aux builtins forcés.

les choses à noter ici:

  • " certains modules populaires installent avec un parent et une paire d'enfants ayant le même nom. Dans ces cas, vous devez aussi ajouter que parent à PYTHONPATH, en plus de son dossier grandparent, que vous avez déjà confirmé/ajouté pour tout le reste.

  • utiliser (par exemple) " google.appengine.API.memcache" lors de l'ajout à forced builtins, pas "memcache" seulement, où "google" dans cet exemple, est un enfant immédiat d'un dossier défini dans PYTHONPATH.

0
répondu Aikude 2016-06-04 11:28:30