PyQt5得到;没有名为';PyQt4'&引用;在Python 3.5中调用matplotlib.pyplot时出错

PyQt5得到;没有名为';PyQt4'&引用;在Python 3.5中调用matplotlib.pyplot时出错,python,matplotlib,pyqt5,Python,Matplotlib,Pyqt5,我正在windows 10计算机上使用Anaconda和Python 3.5.2、Matplotlib 2.0.2、PyQt5.6。当我将matplotlib.pyplot作为plt导入时,出现以下错误: ... File "C:...\Anaconda3\Lib\site-packages\matplotlib\backends\qt_compat.py", line 137, in <module> from PyQt4 import QtCore, Qt

我正在windows 10计算机上使用Anaconda和Python 3.5.2、Matplotlib 2.0.2、PyQt5.6。当我将matplotlib.pyplot作为plt导入时,出现以下错误:

...
File "C:...\Anaconda3\Lib\site-packages\matplotlib\backends\qt_compat.py", 
           line 137, in <module> from PyQt4 import QtCore, QtGui

ImportError: No module named 'PyQt4'
。。。
文件“C:…\Anaconda3\Lib\site packages\matplotlib\backends\qt\u compat.py”,
第137行,从PyQt4导入QtCore,QtGui
ImportError:没有名为“PyQt4”的模块
我不知道为什么它要从PyQt4导入,而我的机器上从未安装过它

问题有相同的错误,但在实际安装了PyQt4的计算机上


我已经检查了matplotlibrc文件,在程序中使用了
matplotlib.use('qt5agg')
,还使用了
matplotlib.rcParams['backend']=“qt5agg”
。我已经卸载并重新安装了上述所有软件包,但都没有用。我甚至尝试安装PyQt4只是为了让事情顺利进行。我完全被难住了。我在SO或github上找到的各种可能的原因或补救措施都没有起到任何作用。

查看错误中的文件和行号,您的问题似乎与我回答的问题相同


也就是说,我认为问题是由
QT_API
环境变量仍然设置为
pyqt4
(或
pyside
)引起的

我也有同样的错误(即使是在Windows7上)。对我来说,问题在于
C:\Users\\.matplotlib\matplotlibrc
中有一个旧的
matplotlibrc
文件,它从我的环境的
matplotlibrc
文件中重写了设置。删除该文件为我解决了问题。

我遇到了类似的问题,发现问题在于安装了64位Anaconda,无法加载可能是32位的PyPt5 DLL。简而言之,我卸载了64位Anaconda,安装了32位版本

为了解决这个问题,我在qt_compat.py中找到了错误的来源。在本模块的大部分时间里,它都在尝试使用PyQt5,因为它在环境中找到了PyQt5。但是,当它到达下面的行时,导入失败,因此它尝试退回到PyQt4,PyQt4没有安装Anaconda,因此发出错误

if QT_API == QT_API_PYQT5:
    try:
        from PyQt5 import QtCore, QtGui, QtWidgets
        _getSaveFileName = QtWidgets.QFileDialog.getSaveFileName
    except ImportError:
        # fell through, tried PyQt5, failed fall back to PyQt4
        QT_API = rcParams['backend.qt4']
        QT_RC_MAJOR_VERSION = 4

在文件外部测试导入语句时,会显示消息“DLL加载失败:%1不是有效的Win32应用程序”。这就是DLL不匹配的原因,也回答了它试图返回PyQt4的原因。

3个步骤可以解决此问题:

pip uninstall pyqt5
pip uninstall matplotlib
pip install matplotlib

API版本似乎是PyQt5,但默认是PyQt4,只需打开工具->首选项->IPython控制台->图形->后端,将QT4更改为QT5,我曾经遇到过同样的问题,下面是我如何修复它的

查看matplotlib配置文件,该文件通常位于 /site packages/matplotlib/mpl data/matplotlibrc的路径 或 /Anaconda3/envs/your_env_name/Lib/site packages/matplotlib/mpl data/matplotlibrc的路径

请参见此处的matplotlibrc示例

如果已安装pyqt5.x.x,并且matplotlibrc中有语句“backend:Qt5Agg”,则要使用“%matplotlib qt”,请将“#backend.qt4:PyQt4”更改为“#backend.qt4:pyqt5”

对于蟒蛇环境,请重新激活该环境


注意:如果将来更新matplotlib,matplotlibrc将自动被覆盖。

您需要使用pip安装PyQt4。您的matplotlib版本需要PyQt4。请参见如何安装否,如果应该使用PyQt5,则安装PyQt4没有意义。你能试试导入matplotlib吗;matplotlib.use(“Qt5Agg”);matplotlib.rcParams[“verbose.level”]=“debug”;将matplotlib.pyplot作为plt导入,查看是否提供了更多信息,您可以在此处发布这些信息?错误基本相同。后端实际上设置为qt5agg.py,但如上所述,它在调用qt_compat.py.thanking之后开始查找qt4。我对
print(os.environ.get('QT_-API'))的响应为“None”
。我设置了系统变量,现在对
print(os.environ.get('QT_-API'))的响应为“pyqt5”
。但是错误仍然存在。前进的方向是查看
qt_compat.py
,并尝试调试它为什么尝试在第137行导入PyQt4。最好的方法是将
qt\u compat.py
复制到一个临时目录,然后从该目录启动
python-m qt\u compat
。这会给您带来相同的错误,但是现在您可以在
qt_compat.py
的副本中添加一些打印语句,以便更容易地调试问题。导入上方的行显示
如果[QT\u API\u PYQT,QT\u API\u PYQTv2]
中有QT\u API。首先在该点打印
QT_API
全局变量的值。我相信你可以从这方面取得一些进展。现在我从PyQt5中得到,
c:…\qt\u compat.py(127)(->导入QtCore,QtGui,qtwidts(Pdb)>c:\…\qt\u compat.py(128)(->\u getSaveFileName=qtwidts.QFileDialog.getSaveFileName(Pdb)AttributeError:module'PyQt5.qtwidts'没有属性'QFileDialog'
。在qtwidts.pyw中有QFileDialog类。我的专业知识已经到了极限。我正在考虑完全卸载/重新安装anaconda。真是一团糟:-)。我必须说,我不知道是什么导致了最后一个问题。也许重新安装是个好主意,或者您可以先在新的conda环境中尝试,在该环境中,您只安装所需的内容。当您参考open Tools->时,您使用的是哪个程序。。。?