2013-04-17 5 views
17

Ich habe meine Pylint Installation Import Flasche ganz in Ordnung. Und mit der gleichen Installation von Kolben, habe ich wtforms läuft gut in meiner Anwendung. Allerdings, wenn ich Pylint auf eine Datei importieren wtforms ausführen:Pylint - Pylint kann flash.ext.wtf nicht importieren?

from flask.ext import wtf 
from flask.ext.wtf import validators 

class PostForm(wtf.Form): 
    content = wtf.TextAreaField('Content', validators=[validators.Required()]) 

Von Pylint erhalte ich:

E: 1,0: No name 'wtf' in module 'flask.ext' 
E: 2,0: No name 'wtf' in module 'flask.ext' 
F: 2,0: Unable to import 'flask.ext.wtf' 

Während der Suche fand ich um this discussion was darauf hindeutet, es kann sein, weil flask.ext Bibliotheken sind eigentlich nur " Verknüpfungen "zu Bibliotheken.

Irgendeine Idee, wie ich das beheben kann? Vielen Dank!

Antwort

25

Also flask.ext ist eigentlich eine benutzerdefinierte Importeur geschrieben von Armin in einer tollen Art und Weise. Es ermöglicht Benutzern, Erweiterungen zu Flaschen in separaten Paketen zu installieren, sie jedoch auf eine konsistente Weise zu importieren. (Eigentlich sollten Sie den Code dafür lesen. Es ist fantastisch.) Das heißt, offenbar pylint schätzt die Eleganz nicht (und das ist meiner Meinung nach ein Fehler), aber Sie haben Glück. Der einfache Weg um dies zu tun, ist folgendes zu tun

import flask_wtf as wtf 
# The above is the equivalent line as: 
# from flask.ext import wtf 
from flask_wtf import validators 
# This is the same as: 
# from flask.ext.wtf import validators 

Dies sollte pylint glücklich machen. Es ist nicht so schön wie die Verwendung von flask.ext, aber Sie müssen wählen, schließen Pylint oder eleganten Code verwenden, aber Sie können nicht beide haben (gerade jetzt).

7

Nachdem ich eine Weile von diesem Fehler genervt war, habe ich ein Pyint-Plugin erstellt, um dieses Problem zu lösen. Code ist an https://github.com/jschaf/pylint-flask

Pylint zu ermöglichen, die flask.ext Module gehen Sie wie folgt zu 'sehen':

  1. pip install pylint-flask
  2. Lauf pylint --load-plugins=pylint_flask <your module>
0

Verwenden < flask_> anstelle von Kolben. ext. <>

Statt "von flask.ext.wtf Import Validatoren" Verwendung "von flask_wtf Import Validatoren"

das gleiche Problem für Mail und Nachrichtenmodul konfrontiert. Hatte zu verwenden "von Flask_mail importieren Nachricht, Mail" anstelle von "aus flask.ext.mail importieren Nachricht, Mail"