在 NFS 文件系统上使用 matplotlib 保存图形
Posted
技术标签:
【中文标题】在 NFS 文件系统上使用 matplotlib 保存图形【英文标题】:Saving figures with matplotlib on NFS filesystem 【发布时间】:2015-09-08 16:46:55 【问题描述】:我在 RHEL 6.7 上通过 Anaconda 使用 ipython notebook。机器设置有 NFS 存储;也就是说,df -P -T /home/USERNAME | tail -n +2 | awk 'print $2'
打印“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是无辜的可能是对的。我正在使用 LateX 渲染保存数字,而这台机器上的 LateX 安装似乎已损坏。我看看能不能解决这个问题。 确认是 LateX 渲染的问题。确保你的包是最新的! 【参考方案1】:在最新的 OpenSuse Leap VM 中也会出现同样的问题,该 VM 也具有最新的 Anaconda 堆栈。令我沮丧的是,它不是确定性的:批量生成图在非常不同的数据集上失败。它有助于插入一个
time.sleep(5)
现在问题发生的频率要低得多。不过还是个 PITA。
【讨论】:
【参考方案2】:严格来说,这可能不是 NFS 的问题。
看它的source in this line和this line(注意这里有一个错误:应该说"dvips failed"
,而不是"dvipng"
),貌似带有dvipng
或者dvips
的外部命令失败了.
所以有很多可能性。首先,您需要弄清楚system()
ed 是哪个外部程序。然后,也许您需要检查是否可以在PATH
环境变量中找到此命令,或者文件本身是否使该命令崩溃。尝试在该文件上手动运行dvip(ng|s)
,看看是否可以获得错误报告。
顺便说一句,从链接源中,如果我正确阅读了源 (IIRTSC),我认为 matplotlib
库通过捕获 stdout
的 dvip(ng|s)
来捕获错误报告是不正确的命令。我们知道os.system()
是邪恶的......
【讨论】:
【参考方案3】:如果没有适当维护的 LateX 包,matplotlib(至少通过 Jupyter 笔记本运行)显然无法保存 LateX 格式的绘图,即使它们显示正确。
【讨论】:
以上是关于在 NFS 文件系统上使用 matplotlib 保存图形的主要内容,如果未能解决你的问题,请参考以下文章