Flask项目导入url_quote报错:无法从werkzeug.urls导入该名称
Flask-OAuthlib导入错误:无法导入'url_quote'的解决办法
错误信息
Traceback (most recent call last): File "e:\Documents\Web Dev\Dinkum\backend\app.py", line 2, in <module> from flask_oauthlib.client import OAuth File "E:\Documents\Web Dev\Dinkum\backend\dinkum\Lib\site-packages\flask_oauthlib\client.py", line 18, in <module> from werkzeug.urls import url_quote, url_decode, url_encode ImportError: cannot import name 'url_quote' from 'werkzeug.urls' (E:\Documents\Web Dev\Dinkum\backend\dinkum\Lib\site-packages\werkzeug\urls.py). Did you mean: 'unquote'?
环境版本
- Flask-OAuthlib:0.9.6
- Flask:3.0.2
相关代码片段
from flask import Flask, redirect, request, url_for, session, render_template from flask_oauthlib.client import OAuth app = Flask(__name__, template_folder=['backend/templates', 'frontend'], static_folder='backend/static')
解决办法
1. 降级Werkzeug到兼容版本
Flask 3.0.2依赖的Werkzeug版本(≥3.0.0)与Flask-OAuthlib 0.9.6不兼容——Werkzeug 2.1+已将url_quote重命名为quote,导致导入失败。
执行以下命令降级Werkzeug:
pip install werkzeug==2.0.3
2. 替换为维护活跃的OAuth库
Flask-OAuthlib已停止维护,推荐使用官方支持的替代库,比如Authlib:
- 安装依赖:
pip install authlib
- 修改代码中的导入:
from flask import Flask, redirect, request, url_for, session, render_template from authlib.integrations.flask_client import OAuth app = Flask(__name__, template_folder=['backend/templates', 'frontend'], static_folder='backend/static')
3. 手动修改Flask-OAuthlib源码(临时方案)
若必须保留当前Flask-OAuthlib版本,可直接修改其源码:
打开E:\Documents\Web Dev\Dinkum\backend\dinkum\Lib\site-packages\flask_oauthlib\client.py,将第18行的导入语句替换为:
from werkzeug.urls import quote as url_quote, url_decode, url_encode
注意:此方案仅临时生效,后续更新依赖会覆盖修改,不推荐长期使用。
内容的提问来源于stack exchange,提问作者Utsav Maji
相关产品推荐
相关产品推荐

