5 Stimmen

pylint mag pkg_resources.resource_filename nicht

In meinem Skript verwende ich:

python from pkg_resources import resource_filename

Sowohl PyDev als auch pylint 0.23 beschweren sich hier über nicht aufgelöste Importe.

E0611 No name 'resource_filename' in module 'pkg_resources'

Soweit ich weiß, liegt das daran, dass sowohl PyDev als auch pylint nur eine Quellcodeanalyse durchführen, ohne zu versuchen, den Code zu parsen/kompilieren. Und anscheinend pkg_resources tut etwas Besonderes, um zu definieren pkg_resources . Das Paket und das Symbol sind natürlich da, und das Ganze funktioniert einwandfrei. Zwei Fragen:

  • Wie kann ich sowohl Eclipse als auch PyDev davon überzeugen, dass sie sich irren?
  • Wodurch wird das Problem überhaupt erst verursacht? Ich habe keine anderen Leute gefunden, die diese Art von Problem haben, und ich bezweifle, dass meine Situation einzigartig ist... :)

Python 2.7.1 (unter OSX), verteile 0.6.19.

0 Stimmen

Haben Sie jemals einen Weg gefunden, pydev so zu trainieren, dass die Code-Vervollständigung funktioniert?

6voto

Epu Punkte 605

Sie können problematische dynamische Module laden, indem Sie die pydev-Python-Interpreter-Definition Ihres Projekts ändern. Konfigurieren Sie die Standardliste der "erzwungenen Build-ins". um die von Ihnen verwendeten dynamisch generierten Definitionen einzubeziehen. Forced built-ins werden durch Shelling und Laden/Inspektion von dynamisch generierten Klassen erzeugt.

In der Definition des Python-Interpreters (preferences => pydev => interpreters => python interpreter) wählen Sie den aktuell verwendeten Interpreter für Ihr pydev-Projekt. Wählen Sie den Forced Builtins Registerkarte. Drücken Sie die New... Taste und fügen Sie pkg_resources in die Liste aufzunehmen.

Ich habe dies getan, und jetzt meine Fehler sind weg, und Auto-Vervollständigen von Methoden funktioniert ok für mein Projekt. Ich benutze Python 2.7.9, pydev 3.3.3, und Eclipse Kepler r2.

Für pylint können Sie Deaktivieren Sie die Warnung global in der pylint-Konfiguration Ihres Projekts für die gesamte Datei oder für eine Instanz ihrer Verwendung. Sie können eine # pylint: disable=E1101 Kommentar am Anfang Ihrer Datei, um es für dieses Modul zu deaktivieren, oder in der Zeile darüber, wo Sie es verwenden, um es nur für diese Instanz zu deaktivieren. Es gibt auch einen möglicherweise zeitaufwendigen Weg, um pylint manuell darauf hinweisen, dass Ihre Klasse bestimmte Methoden hat .

3voto

André Lucas Punkte 39

Ich hatte das gleiche Problem. Für Pydev fand ich die Antwort auf pydev.org: Gehen Sie zur Fehlerzeile, drücken Sie ctrl-1 und wählen Sie 'undefinierte Variable'. Es wird dann ein #@UndefinedVariable Kommentar, und der Fehler verschwindet.

Für pylint genügt es, E1101 zu deaktivieren, pragma # pylint: disable=E1101 . Pylint-Pragmas müssen nur auf der gleichen Einrückungsebene stehen, aber der pydev-Kommentar muss in der gleichen Zeile stehen. Meine etwas kommentarlastige Funktion wurde:

def get_test_datafile(file_):
    # pylint: disable=E1101
    return pkg_resources.resource_string(__name__, #@UndefinedVariable
                                         'testdata/'+file_)

6 Stimmen

Für nicht aufgelöste Importe gibt es die spezifischere @UnresolvedImport Unterdrückung, und für pylint gibt es E0611 anstelle von E1101 ( logilab.org/card/pylintfeatures ) zu bilden: from pkg_resources import resource_filename #@UnresolvedImport #pylint: disable=E0611

0 Stimmen

Das Unterdrücken der Meldung behebt nicht Dinge wie die automatische Vervollständigung, die beim Refactoring oder einfach beim Coding hilfreich sein kann. Siehe meinen Vorschlag, die "Forced Builtins"-Liste deines pydev-Interpreters zu ändern.

0 Stimmen

Pylint ist immer noch problematisch; es gibt einen vorgeschlagenen Patch, der eine Inspektion des Modul-Ladens erforderlich macht ( bitbucket.org/logilab/pylint/issue/413/ )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X