J'ai un projet Python qui utilise PyDev dans Eclipse et PyDev continue à générer de fausses erreurs pour mon code. J'ai un module settings
qui définit un settings
. Je l’importe dans le module b
et attribue un attribut avec:
from settings import settings
settings.main = object()
Dans certains de mes codes - mais pas dans leur totalité, des déclarations telles que:
from settings import settings
print settings.main
... générer des messages "Variable non définie d'importation: main" dans le volet d'erreur du code Eclipse, même si le code s'exécute sans problème. Comment puis-je les corriger?
Pour le code de votre projet, le seul moyen est d’ajouter une déclaration disant que vous vous y attendiez - éventuellement protégée par un if False
Afin qu’elle ne s’exécute pas (l’analyse de code statique ne voit que ce que vous voyez, informations d'exécution - si vous avez ouvert ce module vous-même, vous ne saurez pas que main était attendu).
Pour surmonter cela, il y a quelques choix:
S'il s'agit d'un module externe, il est possible de l'ajouter au forced builtins
Pour que PyDev lui crée un shell afin d'obtenir des informations d'exécution (voir http://pydev.org/manual_101_interpreter.html pour plus de détails) - ie: PyDev importera le module dans un shell et effectuera une dir(module)
et un dir
sur les classes présentes dans le module afin de présenter les complétions et d'effectuer l'analyse du code. .
Vous pouvez utiliser Ctrl + 1 (Cmd + 1 pour Mac) dans une ligne avec une erreur et PyDev vous présentera une option pour ajouter un commentaire afin d'ignorer cette erreur.
Il est possible de créer un module stub
et de l'ajouter aux compléments predefined
( http://pydev.org/manual_101_interpreter.html contient également des informations à ce sujet).
J'utilise opencv qui s'appuie sur des binaires, etc., donc j'ai des scripts où chaque ligne a cette erreur idiote. Python est un langage dynamique, de telles occasions ne doivent pas être considérées comme des erreurs.
J'ai effacé ces erreurs en allant dans:
Fenêtre -> Préférences -> PyDev -> Editeur -> Analyse de code -> Non défini -> Variable non définie à partir de l'importation -> Ignorer
Et c'est ça.
Ce peut être aussi: Fenêtre -> Préférences -> PyDev -> Editeur -> Analyse de code -> Importations -> Import pas trouvé -> Ignorer
Le message marqué comme réponse donne une solution de contournement, pas une solution.
Cette solution fonctionne pour moi:
Window - Preferences - PyDev - Interpreters - Python Interpreter
Forced builtins
New...
multiprocessing
dans mon cas) et cliquez sur OK
Non seulement les messages d'erreur disparaîtront, mais les membres du module seront également reconnus.
J'avais un problème similaire avec un projet Eclipse/PyDev. Dans ce projet, le répertoire racine du code python était un sous-répertoire du projet.
--> MyProject
+ --> src Root of python code
+ --> module1 A module
+ --> module2 Another module
+ --> docs
+ --> test
Lorsque le projet était débogué ou exécuté, tout allait bien car le répertoire de travail était placé au bon endroit. Cependant, l'analyse de code PyDev n'a pas permis de trouver des importations à partir du module 1 ou du module 2.
La solution consistait à modifier les propriétés du projet -> PyDev - PYTHONPATH, à supprimer/MyProject de l’onglet des dossiers sources et à y ajouter/MyProject/src.
Cela a fonctionné pour moi:
étape 1) Suppression de l'interpréteur, reconfiguration automatique
étape 2) Fenêtre - Préférences - PyDev - Interpreters - Python Interpreter) Allez à l’onglet Forced builtins Cliquez sur New ... Tapez le nom du module (curses 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 générant des erreurs. Allez à PyDev-> Analyse de code.
J'ai eu le même problème. J'utilise Python et Eclipse sous Windows. Le code fonctionnait parfaitement, mais Eclipse affiche 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 majuscule des lettres ne correspond pas à celle du fichier de configuration, cela posera parfois des problèmes (mais cela ne semble pas toujours, car la vérification des erreurs a longtemps avant que les problèmes apparaissent soudainement sans raison apparente).
Une approximation de ce que je faisais:
import module.submodule
class MyClass:
constant = submodule.constant
Pour lequel pylint a déclaré: E: 4,15: Undefined variable 'submodule' (undefined-variable)
from module.submodule import CONSTANT
class MyClass:
constant = CONSTANT
Remarque: j'ai également renommé, par la variable importée, un nom en majuscule reflétant sa nature constante.
dans les préférences -> PyDev -> PyLint sous arguments à transmettre à PyLint ajoutez cette ligne:
--generated-members=objects
vous devrez le faire pour chaque génération. J'ai trouvé cela en googlant, mais j'ai perdu la référence.
Cliquez avec le bouton droit de la souris dans l'explorateur de projet sur le module générant des erreurs. Aller à PyDev-> Supprimer les marqueurs d'erreur.
Il est possible que vous deviez simplement reconfigurer votre chemin python dans Eclipse. Voir mon réponse à une question similaire.
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 affiché le message d'erreur "Variable non définie de l'importation: get_default_root_window ()"
Dans le python Shell, vous pouvez voir qu’il s’agit d’un module intégré, comme indiqué dans la réponse ci-dessus:
>>> import gtk.gdk
>>> gtk.gdk
<module 'gtk.gdk' (built-in)>
Maintenant, sous Fenêtre-> Préférences-> PyDev-> Interprètes-> Interprète Python, j'ai sélectionné l'onglet "Intégrations forcées" et ajouté "gtk.gdk" à la liste.
Maintenant, le message d'erreur ne s'affiche plus.
Je trouve que ces 2 étapes fonctionnent pour moi tout le temps:
Les choses à noter ici:
Certains modules courants s'installent avec des paires parent et enfant portant le même nom. Dans ces cas, vous devez également ajouter ce parent à PYTHONPATH, en plus de son dossier de grands-parents, que vous avez déjà confirmé/ajouté pour tout le reste.
Utilisez (par exemple) "google.appengine.api.memcache" lors de l'ajout à des encapsulations forcées, PAS "memcache" uniquement, où "google" dans cet exemple, est un enfant immédiat d'un dossier défini dans PYTHONPATH.