Matplotlib在Ubuntu 14.04上需要sudo

时间:2014-12-27 13:20:58

标签: python linux ubuntu matplotlib

我最近换了一台新笔记本电脑。安装Ubuntu 14.04 LTS和我之前系统包含的所有软件包后,我将所有文件从旧系统复制到新系统。

每当我尝试执行任何有matplotlib调用的python代码时,都会出现以下错误

File "Q1.py", line 2, in <module>
import matplotlib.pyplot as plt

File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 24, in <module>
import matplotlib.colorbar

File "/usr/lib/pymodules/python2.7/matplotlib/colorbar.py", line 29, in <module>
import matplotlib.collections as collections

File "/usr/lib/pymodules/python2.7/matplotlib/collections.py", line 23, in <module>
import matplotlib.backend_bases as backend_bases

File "/usr/lib/pymodules/python2.7/matplotlib/backend_bases.py", line 50, in <module>
import matplotlib.textpath as textpath

File "/usr/lib/pymodules/python2.7/matplotlib/textpath.py", line 11, in <module>
import matplotlib.font_manager as font_manager

File "/usr/lib/pymodules/python2.7/matplotlib/font_manager.py", line 1356, in <module>
_rebuild()

File "/usr/lib/pymodules/python2.7/matplotlib/font_manager.py", line 1343, in _rebuild
pickle_dump(fontManager, _fmcache)

File "/usr/lib/pymodules/python2.7/matplotlib/font_manager.py", line 939, in pickle_dump
with open(filename, 'wb') as fh:

IOError: [Errno 2] No such file or directory: '/tmp/matplotlib-skarthikkrishna/fontList.cache'

从我能够尝试的,这个问题似乎突然出现,因为代码无法访问/ tmp /写入它。当我在执行命令之前添加sudo标记时,代码运行正常。

我很好奇为什么现在这样。我的新旧笔记本电脑上的所有软件包,尤其是pyplot软件包都是一样的。我没有错过安装任何软件包,也没有任何更新未在其中一个系统中反映出来。代码在我的旧笔记本电脑上运行得很好。它拒绝在新的没有sudo的情况下工作。如果有人可以帮助我,我会很感激

一些细节,如果它们相关:

两个系统都运行Ubuntu 14.04 LTS,最后一次升级于2014年12月26日。

我在两个系统上运行Python 2.7.6。 [这是我大部分课程的强制要求]

两个系统上安装的Matplotlib版本为1.3.1

编辑:

ls -ld / tmp /的输出是

drwxrwxrwt 4 root root 4096 Dec 27 18:45 /tmp/

ls -ld / tmp / matplotlib-skarthikkrishna的输出是

ls: cannot access /tmp/matplotlib-skarthikkrishna: No such file or directory

如果有相关的话,输出在有和没有sudo的情况下都是相同的。

1 个答案:

答案 0 :(得分:1)

这是解决方案,对我有用:

sudo rm -rf $HOME/.cache/matplotlib

感谢aberaud commented on Jul 14, 2015

  

我遇到了问题,通过删除碰巧归root所有的$ HOME / .cache / matplotlib来修复它。