在 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 库通过捕获 stdoutdvip(ng|s) 来捕获错误报告是不正确的命令。我们知道os.system() 是邪恶的......

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在 NFS 文件系统上使用 matplotlib 保存图形的主要内容,如果未能解决你的问题,请参考以下文章

NFS共享存储服务

nfs详解

Centos搭建NFS服务器

git 显示在 Mac NFS 文件系统上更改的随机文件

NFS网络文件系统

NFS与AutoNFS实例