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

Flask新项目无法运行:jinja2导入Markup报错求助

解决Flask无法从jinja2导入Markup的问题

问题分析

你遇到的ImportError: cannot import name 'Markup' from 'jinja2'错误,核心原因是Flask版本与Jinja2版本不兼容:Jinja2 3.1及以上版本已将Markup类迁移到markupsafe库中,但旧版Flask仍尝试从jinja2导入该类。另外,你的virtualenv环境可能未被WSGI配置正确加载,导致系统base环境的高版本Jinja2干扰了虚拟环境。

错误日志:

2023-04-23 06:58:31,702: Error running WSGI application 2023-04-23
06:58:31,707: ImportError: cannot import name 'Markup' from 'jinja2'
(/usr/local/lib/python3.10/site-packages/jinja2/init.py)
2023-04-23 06:58:31,708: File
"/var/www/test2-andrewklamerus_eu_pythonanywhere_com_wsgi.py", line
16, in 2023-04-23 06:58:31,708: from flask_app import app
as application # noqa 2023-04-23 06:58:31,708: 2023-04-23
06:58:31,708: File "/home/andrewklamerus/flask4/flask_app.py", line
4, in 2023-04-23 06:58:31,708: from flask import Flask
2023-04-23 06:58:31,708: 2023-04-23 06:58:31,708: File
"/home/andrewklamerus/.local/lib/python3.10/site-packages/flask/init.py",
line 19, in 2023-04-23 06:58:31,708: from jinja2 import
Markup, escape

解决方案

1. 确保WSGI配置正确加载virtualenv

在PythonAnywhere的WSGI配置文件(/var/www/test2-andrewklamerus_eu_pythonanywhere_com_wsgi.py)开头,添加virtualenv激活代码,确保优先使用虚拟环境的依赖:

# 替换为你的virtualenv路径
activate_this = '/home/andrewklamerus/flask4/venv/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

这段代码必须放在from flask_app import app之前。

2. 修复Flask与Jinja2版本兼容问题

激活你的virtualenv后,执行以下操作之一:

  • 升级Flask到兼容版本(推荐):

    pip install --upgrade flask
    

    Flask 2.1及以上版本已适配Jinja2 3.1+的变化,会从markupsafe导入Markup。

  • 降级Jinja2到兼容版本:

    pip install jinja2==3.0.3
    

    该版本仍保留jinja2.Markup,适配旧版Flask。

3. 验证环境依赖

执行以下命令确认虚拟环境内的依赖版本:

pip list

确保Flask和Jinja2版本匹配:

  • Flask < 2.1 → Jinja2 ≤ 3.0.x
  • Flask ≥ 2.1 → Jinja2 ≥ 3.1.x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:47:36