如何在OSX上的虚拟环境中使用matplotlib.pyplot?

时间:2016-02-18 04:11:20

标签: python matplotlib scikit-learn pyqt4 virtualenv

我第一次看到this question的答案,我发现我需要安装自己的后端框架。由于答案提到了PyQt4,我选择了这个。在文档中的链接之后,我最终最终下载了SIP(PyQt4的pre-req),然后是here的PyQt4。最后,在我的代码中,我有:

import matplotlib
matplotlib.use('Qt4agg') # need to call use() before importing plt
import matplotlib.pyplot as plt

但是我仍然收到此错误:

追踪(最近一次通话):   文件“... / venv / lib / python3.5 / site-packages / matplotlib / backends / qt_compat.py”,第159行,     来自PySide导入QtCore,QtGui,版本 version_info ImportError:没有名为'PySide'的模块

在处理上述异常期间,发生了另一个异常:

  

追踪(最近一次呼叫最后一次):

     

文件“... / program.py”,第7行,in       将matplotlib.pyplot导入为plt文件“... / venv / lib / python3.5 / site-packages / matplotlib / pyplot.py”,第114行,   在       _backend_mod,new_figure_manager,draw_if_interactive,_show = pylab_setup()

     

文件   “... / VENV / lib中/ python3.5 /站点包/ matplotlib /后端/ 的init 的.py”   第32行,在pylab_setup中       全局(),当地人(),[backend_name],0)

     

文件   “... / VENV / lib中/ python3.5 /站点包/ matplotlib /后端/ backend_qt4agg.py”   第18行,在       从.backend_qt5agg导入FigureCanvasQTAggBase为_FigureCanvasQTAggBase

     

文件   “... / VENV / lib中/ python3.5 /站点包/ matplotlib /后端/ backend_qt5agg.py”   第15行,在       来自.backend_qt5导入QtCore

     

文件   “... / VENV / lib中/ python3.5 /站点包/ matplotlib /后端/ backend_qt5.py”   第31行,在       来自.qt_compat import QtCore,QtGui,QtWidgets,_getSaveFileName,版本

     

文件   “... / VENV / lib中/ python3.5 /站点包/ matplotlib /后端/ qt_compat.py”   第162行,in       “Matplotlib基于qt的后端需要外部PyQt4,PyQt5,\ n”ImportError:基于Matplotlib qt的后端需要外部PyQt4,   要安装PyQt5或PySide包,但未找到它。

以前有没有人经历过这个?有关从何处开始的任何调试建议或帮助?

编辑:我要补充说,尝试从我的虚拟环境import PyQt4起作用,所以我不确定为什么matplotlib找不到它......

EDIT2:不确定是否重要,但我正在使用PyCharm

4 个答案:

答案 0 :(得分:4)

我在这方面挣扎了好几天,在查看了大量不同的堆栈溢出帖后,终于找到了一个非常简单的解决方案。

这是我对MacOSX和Python3.X的解决方案,适用于已经通过自制软件安装python3(即brew install python3)并安装了virtualenv且已经使用python3创建的虚拟环境的人(例如通过virtualenvwrapper,{{ 1}}):

(1)使用brew安装pyqt和sip:

mkvirtualenv myvenv -p python3

(2)将 $ brew install sip --with-python3 $ brew install pyqt --with-python3 中安装的pyqt和sip文件(自制软件安装的默认位置)链接到virtualenv中的site-packages目录:

/usr/local/Cellar/

确保根据系统需要修改大括号{}中的文本,其中VIRTUALENVHOME是虚拟环境的路径,VIRTUALENVNAME是其名称,SIPVERSION和PYQTVERSION是您的sip和pyqt的版本下载。只需查看相应的目录 $ ln -s /usr/local/Cellar/sip/{SIPVERSION}/lib/python3.X/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.X/site-packages/ $ ln -s /usr/local/Cellar/pyqt/{PYQTVERSION}/lib/python3.X/site-packages/PyQt4/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.X/site-packages/PyQt4 /usr/local/Cellar/sip即可找到这些目录(这些目录的内容应该是版本号的单个目录)。另外不要忘记插入你正在使用的python3版本! (进入python3.X的所有地方)

(3)在你的virtualenv pip install matplotlib(如果你还没有)并修改matplotlibrc,以便matplotlib使用PyQt4后端而不是默认的macosx后端:

/usr/local/Cellar/pyqt

这将在默认的终端文本编辑器中打开 # activate your virtual environment $ workon VIRTUALENVNAME # if you are using virtualenvwrapper $ #source ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/bin/activate # if you are not using virtualenvwrapper # if you haven't already, install matplotlib $ pip install matplotlib # modify the matplotlibrc file to change the backend it is using $ nano ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc (或者您可以使用matplotlibrc代替open -e在TextEdit中打开它。在nano之后转到第一部分,将第#### CONFIGURATION BEGINS HERE行更改为backend : macosx。在下一部分中,取消注释行backend : Qt4Agg

完成此操作后,您应该启动并运行。您可以使用以下简单的代码行测试它是否有效(假设您在虚拟环境中安装了ipython):

backend.qt4 : PyQt4

图表应以直线显示。如果这不起作用,请尝试在虚拟环境中重新安装matplotlib(即 $ ipython -pylab >>> import numpy as np >>> plot(np.arange(10)) pip uninstall matplotlib)。

答案 1 :(得分:2)

您是否要使用conda代替virtualenv

conda create -n matplotenv matplotlib
source activate matplotenv

python -c "import matplotlib.pyplot as plt
p = plt.plot([1,2,3])
plt.show()"

source deactivate

答案 2 :(得分:2)

在此之后解决了这个问题:

pip install matplotlib 您的根目录中有一个名为〜/ .matplotlib的目录。

在那里创建一个〜/ .matplotlib / matplotlibrc文件并添加以下代码:backend:TkAgg

答案 3 :(得分:0)

我遇到了同样的问题,我所做的实际上解决了它(如果你不理解Jorge说的话,那可能会有所帮助!):
1.继续使用anaconda导航仪并启动qtconsole
2.输入:$ brew install sip --with-python3
        $ brew install pyqt --with-python3 3.在python中复制它的结果,并执行。
现在尝试制作图表,它应该有效!