【错误解决】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的版本信息来看是否对应。


  • 35
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值