使用Jupyter Schedule调度任务报错:module 'jinja2' has no attribute 'Markup'
解决Jupyter Schedule报错
module 'jinja2' has no attribute 'Markup'的方案 问题原因
Jinja2 3.0及以上版本把Markup类迁移到了markupsafe库中,而Jupyter Schedule的旧版本代码仍在直接调用jinja2.Markup,当你的环境里Jinja2版本较高时就会触发这个属性错误。直接运行Jupyter Lab时没触发这块代码路径,所以不会报错。
解决方案
1. 降级Jinja2到兼容版本
执行以下命令安装保留jinja2.Markup的旧版本:
pip install jinja2==2.11.3
完成后重启Jupyter Lab,再测试定时调度任务。
2. 手动修复Jupyter Schedule的代码兼容性
如果不想降级Jinja2,可修改Jupyter Schedule的相关代码:
- 通过
pip show jupyter-schedule查看库的安装目录(Location字段) - 找到所有导入
jinja2.Markup的文件(多为UI模板渲染相关代码) - 将导入语句替换为:
或者添加兼容处理:from markupsafe import Markup
注意:后续更新Jupyter Schedule会覆盖修改,需重新处理。try: from jinja2 import Markup except ImportError: from markupsafe import Markup
3. 更新Jupyter Schedule到最新版本
执行命令升级到官方修复后的版本:
pip install --upgrade jupyter-schedule
新版本大概率已适配Jinja2 3.x的API变化。
验证
修改完成后重启Jupyter Lab,创建一个简单的定时任务(比如打印日志),确认任务能正常执行且不再报错。
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

