在 NFS 文件系统上使用 matplotlib 保存图形

Saving figures with matplotlib on NFS filesystem

我在 RHEL 6.7 上通过 Anaconda 使用 ipython notebook。机器设置有 NFS 存储;也就是说,df -P -T /home/USERNAME | tail -n +2 | awk '{print }' 打印出 'nfs'.

所以我想保存在 ipython 笔记本中创建的 matplotlib 图形。但是,调用 savefig 函数会出现此错误(我已经抑制了大部分错误):

RuntimeError: dvipng was not able to process the following file:
/home/USERNAME/.cache/matplotlib/tex.cache/3007d273a0b2642aa3abce6d3d640283.dvi
Here is the full report generated by dvipng: 

No dvipng error report available.

我怀疑这与 NFS 有关(因为它在过去给我带来了其他问题),但除此之外我真的不知道从这里该何去何从。非常感谢任何帮助,如果我能提供更多信息,请告诉我。

这可能不是严格意义上的 NFS 问题。

看它的source in this line and this line(注意这里报错:应该说"dvips failed",不是"dvipng"),好像是用[=12=的外部命令] 或 dvips 失败。

所以有很多可能性。首先,您需要确定 system()ed 是哪个外部程序。然后,也许您需要检查是否可以在 PATH 环境变量中找到此命令,或者文件本身是否使该命令崩溃。在该文件上手动尝试 运行 dvip(ng|s),看看是否可以获得错误报告。

顺便说一句,如果我正确阅读源代码 (IIRTSC),我认为 matplotlib 库通过捕获 stdoutdvip(ng|s) 命令。我们知道 os.system() 是邪恶的...

如果没有正确维护的 LateX 包,matplotlib(至少 运行 通过 Jupyter 笔记本)显然无法保存 LateX 格式的图,即使它们显示正确。

同样的问题出现在最新的 OpenSuse Leap 虚拟机中,其中包含最新的 Anaconda 堆栈。令我沮丧的是,它不是确定性的:批量生成图在非常不同的数据集上失败。它有助于插入

time.sleep(5)

现在问题发生的频率大大降低了。不过仍然是 PITA。