最近新學 Flask,想嘗試使用藍圖模組化應用程式。但甚至在運行簡易 demo 時就出錯。
這個簡易應用有兩個檔案:
app.py
from flask import Flask
app = Flask(__name__)
from calendar import calendar
app.register_blueprint(calendar, url_prefix='/auth')
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(port=8023)
calendar.py
from flask import Blueprint
calendar = Blueprint('calendar', __name__)
@calendar.route('/')
def test():
return 'yes'
運行時發生錯誤:
Traceback (most recent call last):
File "/Users/vencent/.pyenv/versions/ec-env-3.6.0/lib/python3.6/site-packages/werkzeug/http.py", line 22, in <module>
from email.utils import parsedate_tz
File "/Users/vencent/.pyenv/versions/3.6.0/lib/python3.6/email/utils.py", line 33, in <module>
from email._parseaddr import quote
File "/Users/vencent/.pyenv/versions/3.6.0/lib/python3.6/email/_parseaddr.py", line 16, in <module>
import time, calendar
File "/Users/vencent/PycharmProjects/untitled1/calendar.py", line 1, in <module>
from flask import Blueprint
ImportError: cannot import name 'Blueprint'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/vencent/PycharmProjects/untitled1/untitled1.py", line 1, in <module>
from flask import Flask
File "/Users/vencent/.pyenv/versions/ec-env-3.6.0/lib/python3.6/site-packages/flask/__init__.py", line 17, in <module>
from werkzeug.exceptions import abort
File "/Users/vencent/.pyenv/versions/ec-env-3.6.0/lib/python3.6/site-packages/werkzeug/__init__.py", line 151, in <module>
__import__('werkzeug.exceptions')
File "/Users/vencent/.pyenv/versions/ec-env-3.6.0/lib/python3.6/site-packages/werkzeug/exceptions.py", line 71, in <module>
from werkzeug.wrappers import Response
File "/Users/vencent/.pyenv/versions/ec-env-3.6.0/lib/python3.6/site-packages/werkzeug/wrappers.py", line 26, in <module>
from werkzeug.http import HTTP_STATUS_CODES, \
File "/Users/vencent/.pyenv/versions/ec-env-3.6.0/lib/python3.6/site-packages/werkzeug/http.py", line 24, in <module>
from email.Utils import parsedate_tz
ModuleNotFoundError: No module named 'email.Utils'
之前試著把已有的專案用 Blueprint 模組化也是這樣的提示,當時以為是跟其他程式碼有衝突。今天試了一下發現這個 demo 都跑不了...
werkzeug 的版本不相容 python 3.6? 更新一下 werkzeug 試試。