2013-04-17 26 views
17

Tôi đã có bình nạp Pylint cài đặt tốt. Và với cùng một cài đặt của bình, tôi có wtforms chạy tốt trong ứng dụng của tôi. Tuy nhiên, khi tôi chạy pylint trên một tập tin wtforms nhập khẩu:Pylint - Pylint không thể nhập 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()]) 

Từ pylint tôi nhận được:

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' 

Trong khi tìm kiếm xung quanh tôi thấy this discussion cho thấy nó có thể là do thư viện flask.ext đang thực sự chỉ là " phím tắt "tới thư viện.

Bất kỳ ý tưởng nào về cách khắc phục sự cố này? Cảm ơn bạn rất nhiều!

Trả lời

25

Vì vậy, flask.ext thực sự là một nhà nhập khẩu tùy chỉnh được viết bởi Armin một cách tuyệt vời. Nó cho phép mọi người cài đặt các phần mở rộng vào bình trong các gói riêng biệt nhưng nhập chúng theo một cách nhất quán. (Thực sự bạn nên đọc mã cho nó. Thật tuyệt vời.) Điều đó nói rằng, dường như pylint không đánh giá cao sự tao nhã (và đây thực sự là một lỗi, theo ý kiến ​​của tôi) nhưng bạn đang may mắn. Cách dễ dàng để thực hiện việc này là thực hiện theo các cách sau

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 

Điều này sẽ làm cho mọi người vui vẻ. Nó không phải là tốt đẹp như sử dụng flask.ext nhưng bạn phải chọn đóng lên pylint hoặc sử dụng mã thanh lịch, nhưng bạn không thể có cả hai (ngay bây giờ).

7

Bị bực mình bởi lỗi này trong một thời gian, tôi đã tạo một plugin pylint để giải quyết vấn đề này. Mã là https://github.com/jschaf/pylint-flask

Để kích hoạt pylint 'nhìn thấy' các module flask.ext làm như sau:

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

Sử dụng flask_ <> thay vì bình. ext. <>

Thay vì "từ xác nhận nhập khẩu flask.ext.wtf" sử dụng "từ flask_wtf xác nhận nhập khẩu"

Phải đối mặt với vấn đề tương tự cho Mail và tin nhắn module. Đã phải sử dụng "từ thông báo nhập khẩu flask_mail, Thư" thay vì "từ flask.ext.mail nhập Thư, Thư"