"Segmentation Fault" 在 matplotlib 运行 示例 Librosa 脚本中

"Segmentation Fault" in matplotlib running example Librosa script

我安装了 Librosa(https://github.com/librosa/librosa) on Linux Mint 18 Mate x64. When I want to run example script, e.g.: http://librosa.github.io/librosa/generated/librosa.feature.tempogram.html#librosa.feature.tempogram,遇到许多问题后崩溃并出现 "Segmentation Fault" 错误:

$ python librosa-feature-tempogram-1.py 
/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_qt5.py:140: Warning: g_main_context_push_thread_default: assertion 'acquired_context' failed
  qApp = QtWidgets.QApplication([str(" ")])
Segmentation fault

我试着逐行调试,结果是:

$ python
Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import librosa

>>> # Visualize an STFT power spectrum
... 
>>> import matplotlib.pyplot as plt
>>> y, sr = librosa.load(librosa.util.example_audio_file())

>>> plt.figure(figsize=(12, 8))
/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_qt5.py:140: Warning: g_main_context_push_thread_default: assertion 'acquired_context' failed
  qApp = QtWidgets.QApplication([str(" ")])
Segmentation fault

matplotlib 库和 Qt (5.7.0) 可能存在一些问题。此外,我记得我在安装 Librosa 时遇到了很多问题,包括 matplotlib,因此可能是安装问题。但是,我不知道如何解决它。我希望有人能为我提供有用的线索。

最后,我通过安装这些软件包解决了这个问题:sudo apt-get install tk-dev libpng-dev libffi-dev dvipng texlive-latex-base 并使用 pip 重新安装 matplotlib。我还在 TkAgg 上的 matplotlib 中更改了背景。有一个带有导入语句的代码开头:

import librosa
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

现在完美运行了。