2013-04-17 21 views
17

Ho la mia beuta per l'importazione di installazione di Pylint. E con la stessa installazione di fiasco, ho dei wtform che funzionano bene nella mia applicazione. Tuttavia, quando si esegue pylint su un file wtforms importazione:Pylint - Pylint non è in grado di importare flask.ext.wtf?

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

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

Da pylint ottengo:

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' 

Durante la ricerca in giro ho trovato this discussion suggerendo può essere perché le librerie flask.ext sono in realtà solo " scorciatoie "alle librerie.

Qualche idea su come posso risolvere questo problema? Grazie mille!

risposta

25

Quindi flask.ext è in realtà un importatore personalizzato scritto da Armin in modo fantastico. Permette alle persone di installare estensioni a flask in pacchetti separati ma li importa in un modo coerente. (Davvero dovresti leggere il codice per questo, è fantastico.) Detto questo, apparentemente la macchinista non apprezza l'eleganza (e questo è in realtà un bug, secondo me) ma sei fortunato. Il modo più semplice per aggirare questo è di fare quanto segue

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 

Questo dovrebbe rendere pylint felice. Non è bello come usare flask.ext ma devi scegliere di spegnere il puntatore o usare un codice elegante, ma non puoi averli entrambi (adesso).

7

Essendo stato infastidito da questo bug per un po ', ho creato un plugin di pylint per risolvere questo problema. Il codice è a https://github.com/jschaf/pylint-flask

Per consentire pylint di 'vedere' i moduli flask.ext effettuare le seguenti operazioni:

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

Usa flask_ <> al posto del pallone. ext. <>

Invece di "da flask.ext.wtf validatori di importazione" uso "da flask_wtf validatori importazione"

Di fronte lo stesso problema per Mail e il modulo del messaggio. Ha dovuto utilizzare "da messaggio di importazione flask_mail, Mail" anziché "da flask.ext.mail import Message, Mail"

Problemi correlati