You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask执行pytest时触发ImportError:无法从werkzeug.urls导入url_quote

Flask2.2.2运行pytest时出现ImportError: cannot import name 'url_quote' from 'werkzeug.urls'

环境信息

Python 3.10.11
Flask==2.2.2

基于pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime镜像在Docker中运行Flask后端。未指定版本安装pytest(自动安装了7.4.2)后,执行pytest时出现导入错误,日志如下:

==================================== ERRORS ====================================
_____________ ERROR collecting tests/test_fiftyone_utils_utils.py ______________
ImportError while importing test module '/builds/kw/data-auto-analysis-toolkit-backend/tests/test_fiftyone_utils_utils.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/opt/conda/lib/python3.10/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests/test_fiftyone_utils_utils.py:2: in <module>
    import daat  # noqa: F401
/opt/conda/lib/python3.10/site-packages/daat-1.0.0-py3.10.egg/daat/__init__.py:1: in <module>
    from daat.app import app
/opt/conda/lib/python3.10/site-packages/daat-1.0.0-py3.10.egg/daat/app/__init__.py:6: in <module>
    from flask import Flask, jsonify, request
/opt/conda/lib/python3.10/site-packages/flask/__init__.py:5: in <module>
    from .app import Flask as Flask
/opt/conda/lib/python3.10/site-packages/flask/app.py:30: in <module>
    from werkzeug.urls import url_quote
E   ImportError: cannot import name 'url_quote' from 'werkzeug.urls' (/opt/conda/lib/python3.10/site-packages/werkzeug/urls.py)

但直接执行python run.py(代码如下)时后端运行正常:

from daat import app

app.run(host='0.0.0.0')

问题原因

本质是依赖版本冲突:Flask2.2.2依赖的Werkzeug版本范围是>=2.2.2,但Werkzeug从2.3.0版本开始移除了url_quote这个API(改用url_quote_plus或其他替代方法)。安装pytest7.4.2时,pip的依赖解析自动升级了Werkzeug到不兼容的版本,导致Flask导入失败。而之前直接运行后端正常,是因为当时环境里的Werkzeug版本还在Flask2.2.2兼容的范围内。

解决方案

方案一:固定Werkzeug版本到兼容范围

执行命令降级Werkzeug:

pip install werkzeug<=2.2.3

之后重新运行pytest即可。

方案二:升级Flask到兼容新版本Werkzeug的版本

Flask2.3.0及以上版本已经适配了Werkzeug2.3+的API变化,执行升级命令:

pip install flask>=2.3.0

方案三:指定pytest版本安装,避免依赖升级

如果不想改动Flask或Werkzeug版本,可以安装一个不会触发Werkzeug升级的pytest版本,比如7.3.0:

pip install pytest==7.3.0

内容的提问来源于stack exchange,提问作者stevezkw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:31:18