【错误解决】ImportError: cannot import name ‘url_quote‘ from ‘werkzeug.urls‘
项目场景:
使用pyecharts整合flask框架的时候代码执行提示ImportError: cannot import name ‘url_quote’ from ‘werkzeug.urls’
问题描述
通过vscode创建pyecharts结合flask在网页上创建图标的时候提示ImportError: cannot import name ‘url_quote’ from ‘werkzeug.urls’
原因分析:
1、源代码
from flask import Flask, render_template,Markup
from pyecharts.charts import Bar,Timeline
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType
app = Flask(__name__)
#生成html的图表
def create_chart01():
#绘制时间线图
timeline = Timeline(init_opts=opts.InitOpts(theme=ThemeType.DARK))
for i in range(2020,2031):
#绘制2020-2030年分类销量柱状图
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
#添加数据
bar.add_xaxis(Faker.choose())
bar.add_yaxis('A',Faker.values())
bar.add_yaxis('B',Faker.values())
bar.set_global_opts(title_opts=opts.TitleOpts(title=f"{i}年销量"))
#添加到时间线图
timeline.add(bar,f'{i}年')
timeline.render('pyecharts_flask_demo/templates/show_chart01.html')
#返回图表对象
def create_chart02():
#绘制时间线图
timeline = Timeline(init_opts=opts.InitOpts(theme=ThemeType.DARK))
for i in range(2020,2031):
#绘制2020-2030年分类销量柱状图
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
#添加数据
bar.add_xaxis(Faker.choose())
bar.add_yaxis('A',Faker.values())
bar.add_yaxis('B',Faker.values())
bar.set_global_opts(title_opts=opts.TitleOpts(title=f"{i}年销量"))
#添加到时间线图
timeline.add(bar,f'{i}年')
return timeline
#1.直接渲染页面
#配置路由
@app.route('/show_chart01')
def show_chart01():
create_chart01()
return render_template('show_chart01.html')
#2.返回一个模板
@app.route('/show_chart02')
def show_chart02():
timeline = create_chart02()
#返回一个模板
return Markup(timeline.render_embed())
@app.route('/get_opts')
def get_opts():
timeline = create_chart02()
return timeline.dump_options_with_quotes()
#3.前后端分离
@app.route('/show_chart03')
def show_chart03():
return render_template('show_chart03.html')
if __name__ == '__main__':
app.run(debug=True)
2、分析
首先了解到ImportError: cannot import name ‘url_quote’ from 'werkzeug.urls该报错产生的原因是因为在导入 werkzeug.urls 模块时,Python 无法找到名为 url_quote 的函数或对象,有可能是高版本将 url_quote移出更新。由于 werkzeug是在安装flask时同时安装的,需要通过pip list查看flask和 werkzeug的版本信息。
flask是2.0.3, werkzeug是3.0.1,在虚拟环境的werkzeug包中查找urls.py文件看是没有url_quote对应函数:
想到可以查看flask的对应版本其他包的最低安装版本加载尝试,访问flask的git仓库进行版本说明查找:
1)访问 Flask 的 GitHub 仓库:https://github.com/pallets/flask
2)在仓库页面的左侧,点击 “Tags” 按钮,列出所有的版本标签找到所需版本2.0.3
3)找到 setup.py 文件,可以看到所有的其他包的版本信息
尝试将werkzeug降为2.0.3,和flask保持一致,再执行代码,可成功运行:
加载进入界面之后,提示FileNotFoundError: [Errno 2] No such file or directory: ‘pyecharts_flask_demo/templates/show_chart01.html’
检查代码路径,是因为主文件夹名为代码,里面创建了pyecharts_flask_demo再包含templates:
所以在相对路径书写时从templates开始即可
成功执行:
并发错误:
安装flask时的其他包也有可能出现错误提示类似于 ImportError: cannot import name Markup from jinja2,该类错误都是包的版本不一致所导致,基本可以通过git的版本信息来看是否对应。
更多推荐
所有评论(0)