python flask wtforms pylint

python - Pylint-¿Pylint no puede importar flask.ext.wtf?



wtforms (3)

Así que flask.ext es en realidad un importador personalizado escrito por Armin de una manera increíble. Permite a las personas instalar extensiones en un matraz en paquetes separados, pero importarlas de una manera consistente. (Realmente deberías leer el código. Es fantástico.) Dicho esto, aparentemente pylint no aprecia la elegancia (y esto es realmente un error, en mi opinión) pero estás de suerte. La forma más fácil de solucionar esto es hacer lo siguiente

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

Esto debería hacer feliz a Pylint. No es tan agradable como usar flask.ext pero tienes que elegir cerrar el pylint o usar un código elegante, pero no puedes tener ambos (ahora mismo).

Tengo mi instalación Pylint importar matraz muy bien. Y con esa misma instalación de matraz, tengo formularios que se ejecutan perfectamente en mi aplicación. Sin embargo, cuando ejecuto Pylint en un archivo importando wtforms:

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

De Pylint me sale:

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''

Mientras buscaba, encontré esta discusión que sugiere que puede ser porque las bibliotecas flask.ext son en realidad simplemente "accesos directos" a las bibliotecas.

¿Alguna idea de cómo puedo arreglar esto? Muchas gracias


Después de haber estado molesto por este error por un tiempo, creé un plugin de pylint para resolver este problema. El código está en https://github.com/jschaf/pylint-flask

Para habilitar pylint para ''ver'' los módulos de flask.ext haga lo siguiente:

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

Use el matraz _ <> en lugar del matraz.ext. <>

En lugar de "desde flask.ext.wtf importar validadores" use " desde flask_wtf importar validadores "

Se enfrentó el mismo problema para el correo y el módulo de mensajes. Tuvo que usar " desde el mensaje de importación de correo electrónico, correo " en lugar de "desde el mensaje de importación de correo electrónico, correo"