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

Jupyter Notebook定时/远程执行导出HTML无图表问题求助

问题描述
  • 在Ubuntu本地终端执行jupyter nbconvert --execute --to html,可正常生成包含完整图表的HTML文件
  • 通过crontab定时执行或SSH远程终端执行时,脚本能正常运行并输出打印内容,但无法生成图表
  • 核心绘图代码片段:
for i in range(15):
    (... )
    np.log(pd_df+1).join(pd_df_2).plot()
    plt.show()
    plt.close()

    pd_df.join(pd_df_2).plot()
    plt.show()
    plt.close()

    np.clip(pd_df_3, -1, 1).plot()
    plt.show()
    plt.close()
  • 已尝试但无效的方案:
    • 在导入命令前添加%matplotlib inline
    • 导入plotly.io并设置pio.renderers.default = 'notebook'
    • 改用sh替代bash执行脚本
解决方案

1. 强制matplotlib使用无GUI后端

远程/定时任务环境没有图形界面,matplotlib默认依赖GUI后端(如TkAgg),需指定非交互式后端:
在导入matplotlib相关模块前添加:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

注意:matplotlib.use()必须在import plt之前调用,否则不生效。

2. 替换plt.show()为非交互式绘图逻辑

plt.show()依赖GUI环境才能渲染,建议调整代码直接生成可被nbconvert捕获的图表对象:
修改绘图代码为:

# 生成图表并获取figure对象
fig = np.log(pd_df+1).join(pd_df_2).plot().get_figure()
plt.close(fig)  # 显式关闭避免内存泄漏
# 如需在Notebook中预览,可添加display(fig)

也可在Notebook开头使用魔法命令%matplotlib agg,替代inline,强制启用无GUI后端。

3. 统一执行环境的依赖与路径

  • 检查crontab/SSH环境的Python环境:在脚本开头添加which python3和pip3 list输出,对比本地终端的环境,确保matplotlib、pandas等依赖版本一致
  • crontab中需使用命令的完整路径,避免环境变量差异:
0 1 * * * /usr/bin/python3 -m jupyter nbconvert --execute --to html /绝对路径/你的笔记本.ipynb

4. 关闭matplotlib交互式模式(可选)

在绘图代码前添加:

plt.ioff()

关闭交互式模式,避免依赖GUI事件循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:42:06