如何解决Flask启动时的'cannot import name 'escape' from 'jinja2''错误
问题描述
启动Flask时触发如下错误:
Traceback (most recent call last): File "/home/ec2-user/meta-system/run_app.py", line 22, in <module> from system import FlaskApp File "/home/ec2-user/meta-system/system/__init__.py", line 20, in <module> from flask import Flask File "/home/ec2-user/meta-system/venv/lib64/python3.9/site-packages/flask/__init__.py", line 14, in <module> from jinja2 import escape ImportError: cannot import name 'escape' from 'jinja2' (/home/ec2-user/meta-system/venv/lib64/python3.9/site-packages/jinja2/__init__.py) make: *** [Makefile:17: up] Error 1
已尝试升级Flask和Jinja2但无效,当前依赖版本:
[ec2-user@ip-172-31-26-227 meta-system]$ pip3 show flask Name: Flask Version: 2.3.3 Summary: A simple framework for building complex web applications.
[ec2-user@ip-172-31-26-227 meta-system]$ pip3 show jinja2 Name: Jinja2 Version: 3.1.2 Summary: A very fast and expressive template engine.
因其他依赖限制无法降级Jinja2,求可行解决方案。
解决方案
- 修改Flask导入语句:找到虚拟环境中Flask的
__init__.py文件(路径:/home/ec2-user/meta-system/venv/lib64/python3.9/site-packages/flask/__init__.py),将第14行的from jinja2 import escape替换为from markupsafe import escape。Jinja2 3.x已将escape函数迁移到markupsafe库,手动修改可直接解决导入错误。 - 重新安装Flask:执行命令
pip install Flask==2.3.3 --force-reinstall,强制重新安装Flask,确保其依赖的markupsafe版本与当前环境兼容,修复可能存在的文件损坏或缓存问题。 - 固定markupsafe版本:先执行
pip check检查依赖冲突,若发现markupsafe版本异常,执行pip install markupsafe==2.1.3固定版本(该版本与Jinja2 3.1.2、Flask 2.3.3完全兼容),避免其他依赖篡改版本导致冲突。
内容的提问来源于stack exchange,提问作者Perry Hoekstra
相关产品推荐
相关产品推荐

