wake-up-neo.com

Wie behebe ich PyDev-Fehler "Undefinierte Variable aus Import"?

Ich habe ein Python Projekt mit PyDev in Eclipse, und PyDev generiert immer wieder falsche Fehler für meinen Code. Ich habe ein Modul settings, das ein settings definiert. Ich importiere das in Modul b und ordne ein Attribut zu mit:

from settings import settings
settings.main = object()

In einigen meiner Codes - aber nicht in allen - finden sich Aussagen wie:

from settings import settings
print settings.main 

... im Eclipse-Codefehlerfenster die Meldung "Undefinierte Variable aus import: main" generieren, obwohl der Code problemlos ausgeführt wird. Wie kann ich das korrigieren?

133
Chris B.

Für Code in Ihrem Projekt besteht die einzige Möglichkeit darin, eine Erklärung hinzuzufügen, die besagt, dass Sie dies erwartet haben - möglicherweise durch if False Geschützt -, damit es nicht ausgeführt wird (die statische Code-Analyse sieht nur, was Sie sehen, nicht Laufzeitinfo - Wenn Sie dieses Modul selbst geöffnet hätten, hätten Sie keinen Hinweis darauf, dass main erwartet wurde.

Um dies zu überwinden, gibt es einige Möglichkeiten:

  1. Wenn es sich um ein externes Modul handelt, kann es zum forced builtins Hinzugefügt werden, sodass PyDev eine Shell erstellt, um Laufzeitinformationen zu erhalten (siehe http://pydev.org/manual_101_interpreter.html für Details) - dh: Meistens importiert PyDev das Modul in eine Shell und führt eine dir(module) und dir für die im Modul gefundenen Klassen aus, um Vervollständigungen darzustellen und Code zu analysieren .

  2. Sie können Strg + 1 (Cmd + 1 für Mac) in einer Zeile mit einem Fehler verwenden, und PyDev zeigt Ihnen die Option an, einen Kommentar hinzuzufügen, um diesen Fehler zu ignorieren.

  3. Es ist möglich, ein stub Modul zu erstellen und es zu den predefined Vervollständigungen hinzuzufügen ( http://pydev.org/manual_101_interpreter.html hat auch Details dazu).

151
Fabio Zadrozny

Ich benutze opencv, das auf Binärdateien usw. basiert, also habe ich Skripte, in denen jede zweite Zeile diesen dummen Fehler aufweist. Python ist eine dynamische Sprache, daher sollten solche Gelegenheiten nicht als Fehler angesehen werden.

Ich habe diese Fehler insgesamt behoben, indem ich zu folgendem Thema gegangen bin:

Fenster -> Einstellungen -> PyDev -> Editor -> Codeanalyse -> Undefiniert -> Undefinierte Variable aus Import -> Ignorieren

Und das ist das.

Es kann auch sein, Fenster -> Einstellungen -> PyDev -> Editor -> Codeanalyse -> Importe -> Import nicht gefunden -> Ignorieren

47
ubershmekel

Der als Antwort markierte Beitrag bietet eine Problemumgehung und keine Lösung.

Diese Lösung funktioniert bei mir:

  • Gehe zu Window - Preferences - PyDev - Interpreters - Python Interpreter
  • Gehe zum Forced builtins tab
  • Klicke auf New...
  • Geben Sie den Namen des Moduls ein (multiprocessing in meinem Fall) und klicken Sie auf OK

Die Fehlermeldungen verschwinden nicht nur, die Modulmitglieder werden auch erkannt.

17
stenci

Ich hatte ein ähnliches Problem mit einem Eclipse/PyDev-Projekt. In diesem Projekt war das Stammverzeichnis des python code ein Unterverzeichnis des Projekts.

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

Beim Debuggen oder Ausführen des Projekts war alles in Ordnung, da das Arbeitsverzeichnis an der richtigen Stelle festgelegt wurde. Die PyDev-Code-Analyse konnte jedoch keine Importe von Modul1 oder Modul2 finden.

Die Lösung bestand darin, die Projekteigenschaften -> PyDev - PYTHONPATH-Sektion zu bearbeiten und/MyProject von der Quellordner-Registerkarte zu entfernen und stattdessen/MyProject/src hinzuzufügen.

9
Jules

Das hat bei mir funktioniert:

schritt 1) ​​Entfernen Sie den Interpreter und konfigurieren Sie ihn automatisch erneut

schritt 2) Fenster - Einstellungen - PyDev - Interpreter - Python Interpreter Gehen Sie zur Registerkarte Forced builtins. Klicken Sie auf Neu ... Geben Sie den Namen des Moduls ein (in meinem Fall Flüche) und klicken Sie auf OK

schritt 3) Klicken Sie im Projektexplorer mit der rechten Maustaste auf das fehlerhafte Modul. Gehen Sie zu PyDev-> Code-Analyse.

6
SJP

Ich hatte das gleiche problem Ich verwende Python und Eclipse unter Windows. Der Code lief einwandfrei, aber Eclipse zeigt überall Fehler an. Nachdem ich den Namen des Ordners 'Lib' in 'lib' geändert habe (C:\Python27\lib), das Problem wurde behoben.Wenn die Groß- und Kleinschreibung der Buchstaben nicht mit der in der Konfigurationsdatei übereinstimmt, kann dies zu Problemen führen (dies scheint jedoch nicht immer der Fall zu sein, da die Fehlerprüfung in Ordnung war lange bevor die Probleme plötzlich ohne ersichtlichen Grund auftraten).

1
Leon

Eine Annäherung an das, was ich tat:

import module.submodule

class MyClass:
    constant = submodule.constant

Zu welchem ​​Pylint sagte: E: 4,15: Undefined variable 'submodule' (undefined-variable)

Ich habe das gelöst, indem ich meinen Import wie folgt geändert habe:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

Hinweis: Ich habe auch die importierte Variable umbenannt, um einen Namen in Großbuchstaben zu erhalten, der die Konstanz widerspiegelt.

1
ThorSummoner

in den Einstellungen -> PyDev -> PyLint unter Argumente, die an PyLint übergeben werden sollen füge diese Zeile hinzu:

--generated-members=objects

sie müssen dies für jedes generierte tun. Ich habe das durch googeln gefunden, aber ich habe den Verweis verloren.

0
Mark Mikofski

Klicken Sie im Projektexplorer mit der rechten Maustaste auf das fehlerhafte Modul. Gehen Sie zu PyDev-> Fehlermarkierungen entfernen.

0
Chet

Möglicherweise müssen Sie Ihren python Pfad in Eclipse neu konfigurieren. Siehe mein Antwort zu einer ähnlichen Frage.

0
oob

Meine Antwort liefert nichts Neues, nur ein konkretes Beispiel, auf das ich gestoßen bin.

import gtk.gdk

w = gtk.gdk.get_default_root_window()

PyDev zeigte die Fehlermeldung "Undefinierte Variable aus Import: get_default_root_window ()"

In der python Shell können Sie sehen, dass dies ein 'eingebautes' Modul ist, wie in einer Antwort oben erwähnt:

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

Jetzt habe ich unter Window-> Preferences-> PyDev-> Interpreters-> Python Interpreter die Registerkarte 'Forced Builtins' ausgewählt und der Liste 'gtk.gdk' hinzugefügt.

Die Fehlermeldung wurde nun nicht mehr angezeigt.

0
chrimuelle

Ich finde, dass diese 2 Schritte die ganze Zeit für mich arbeiten:

  1. Bestätigen Sie das Hinzufügen des übergeordneten Ordners des Moduls zum PYTHONPATH.
  2. Füge den vollständigen Namen des Moduls zu den erzwungenen Buildins hinzu.

Die Dinge, die hier zu beachten sind:

  • Einige beliebte Module werden mit einem übergeordneten und einem untergeordneten Paar mit demselben Namen installiert. In diesen Fällen müssen Sie dieses übergeordnete Element zusätzlich zu seinem übergeordneten Ordner, den Sie bereits für alle anderen Elemente bestätigt/hinzugefügt haben, zu PYTHONPATH hinzufügen.

  • Verwenden Sie (zum Beispiel) "google.appengine.api.memcache", wenn Sie erzwungene eingebaute Elemente hinzufügen, NICHT nur "memcache", wobei "google" in diesem Beispiel ein unmittelbares untergeordnetes Element eines in PYTHONPATH definierten Ordners ist.

0
Aikude