ImportError:无法导入名称“QtCore”

ImportError: cannot import name 'QtCore'

提问人:Abhishek Bhatia 提问时间:9/19/2016 最后编辑:Abhishek Bhatia 更新时间:7/13/2019 访问量:28466

问:

我在以下导入中出现以下错误。 这似乎与熊猫导入有关。我不确定如何调试/解决这个问题。

进口:

import pandas as pd
import numpy as np
import pdb, math, pickle
import matplotlib.pyplot as plt

错误:

In [1]: %run NN.py
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
/home/abhishek/Desktop/submission/a1/new/NN.py in <module>()
      2 import numpy as np
      3 import pdb, math, pickle
----> 4 import matplotlib.pyplot as plt
      5 
      6 class NN(object):

/home/abhishek/anaconda3/lib/python3.5/site-packages/matplotlib/pyplot.py in <module>()
    112 
    113 from matplotlib.backends import pylab_setup
--> 114 _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
    115 
    116 _IP_REGISTERED = None

/home/abhishek/anaconda3/lib/python3.5/site-packages/matplotlib/backends/__init__.py in pylab_setup()
     30     # imports. 0 means only perform absolute imports.
     31     backend_mod = __import__(backend_name,
---> 32                              globals(),locals(),[backend_name],0)
     33 
     34     # Things we pull in from all backends

/home/abhishek/anaconda3/lib/python3.5/site-packages/matplotlib/backends/backend_qt4agg.py in <module>()
     16 
     17 
---> 18 from .backend_qt5agg import FigureCanvasQTAggBase as _FigureCanvasQTAggBase
     19 
     20 from .backend_agg import FigureCanvasAgg

/home/abhishek/anaconda3/lib/python3.5/site-packages/matplotlib/backends/backend_qt5agg.py in <module>()
     14 
     15 from .backend_agg import FigureCanvasAgg
---> 16 from .backend_qt5 import QtCore
     17 from .backend_qt5 import QtGui
     18 from .backend_qt5 import FigureManagerQT

/home/abhishek/anaconda3/lib/python3.5/site-packages/matplotlib/backends/backend_qt5.py in <module>()
     29     figureoptions = None
     30 
---> 31 from .qt_compat import QtCore, QtGui, QtWidgets, _getSaveFileName, __version__
     32 from matplotlib.backends.qt_editor.formsubplottool import UiSubplotTool
     33 

/home/abhishek/anaconda3/lib/python3.5/site-packages/matplotlib/backends/qt_compat.py in <module>()
    135     # have been changed in the above if block
    136     if QT_API in [QT_API_PYQT, QT_API_PYQTv2]:  # PyQt4 API
--> 137         from PyQt4 import QtCore, QtGui
    138 
    139         try:

ImportError: cannot import name 'QtCore'

调试:

$ python -c "import PyQt4"
$ python -c "from PyQt4 import QtCore"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: cannot import name 'QtCore'
$ conda list | grep qt
jupyter-qtconsole-colorschemes 0.7.1                     <pip>
pyqt                      5.6.0                    py35_0  
qt                        5.6.0                         0  
qtawesome                 0.3.3                    py35_0  
qtconsole                 4.2.1                    py35_0  
qtpy                      1.0.2                    py35_0 

我找到了其他答案,但都与 Windows 有关。 我正在使用 ubuntu 16.04 和 python 3 的 anaconda 发行版。

蟒蛇 python-import qtcore

评论

0赞 georgedeath 12/14/2016
别忘了接受答案 @abhishek-bhatia
0赞 Yibo Yang 12/26/2017
事实证明,这是由我的启动脚本中的 ipython 魔术“%matplotlib qt”引起的,它会尝试使用 qt4。用“%matplotlib qt5”替换它(或完全删除它)对我有用。
0赞 Ron Mann 7/13/2019
检查是否有效。from PyQt5.QtCore import QObject
0赞 Ron Mann 7/13/2019
您是否将“s”添加到QObject中?

答:

23赞 georgedeath 9/19/2016 #1

将 pyqt 版本 5.6.0 降级到 4.11.4,将 qt 从版本 5.6.0 降级到 4.8.7 修复了以下问题:

$ conda install pyqt=4.11.4
$ conda install qt=4.8.7

问题本身正在这里得到解决:https://github.com/ContinuumIO/anaconda-issues/issues/1068

评论

1赞 Amelio Vazquez-Reina 9/20/2016
谢谢 Georgedeath,我们在哪里可以了解更多关于这个问题的信息?我们可以跟踪任何票证吗?
0赞 georgedeath 9/21/2016
更新了答案以包含问题 @AmelioVazquez-Reina
1赞 Turtles Are Cute 10/15/2016
修复了 matplotlib,但破坏了 jupyter qtconsole
3赞 MHankin 11/3/2016
降级Qt后,我只是收到一个不同的错误:ImportError:libSM.so.6:无法打开共享对象文件:没有这样的文件或目录
5赞 Allan Zelener 9/29/2016 #2

为了避免降级,您还可以(正如 tacaswell 在问题中建议的那样)使用以下方法之一设置后端:http://matplotlib.org/faq/usage_faq.html#what-is-a-backendQt5Agg

例如,您可以修改位于 中的 matplotlibrc 文件,并将后端行更改为 .这将使后端成为整个 conda 环境中的默认后端。/your/path/to/anaconda3/envs/yourenv/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrcbackend : Qt5AggQt5Aggyourenv

评论

3赞 georgedeath 9/30/2016
值得注意的是,这并不总是有效,因为它不适合我。我首先尝试了这个,但最终不得不使用我在答案中说明的方法。
5赞 Archie 10/19/2016 #3

更新 matplotlib 为我解决了问题:

conda install matplotlib
2赞 Yuchao Jiang 4/8/2017 #4

我尝试了以上所有方法,但都失败了。

只有这对我有用:

sudo pip install matplotlib --upgrade
4赞 bing 6/1/2017 #5

艾伦·泽莱纳(Allan Zelener)的解决方案对我有用。作为补充,

  1. “matplotlibrc”文件位置按以下顺序确定

    • $PWD/matplotlibrc(当前目录)

    • $MATPLOTLIBRC/matplotlibrc

    • $MPLCONFIGDIR/matplotlibrc

    • 在 Linux 上,

      • $HOME/.matplotlib/matplotlibrc,如果存在

      • 或 (如果 $XDG_CONFIG_HOME已定义)$XDG_CONFIG_HOME/matplotlib/matplotlibrc

      • 或 (如果 $XDG_CONFIG_HOME 未定义)$HOME/.config/matplotlib/matplotlibrc

    • 在其他平台上,

      • $HOME/.matplotlib/matplotlibrcif 定义。$HOME
    • 最后,它寻找一个 系统定义的副本。$MATPLOTLIBDATA/matplotlibrc

  2. 如果您从 pyqt4 升级了 pyqt5,pyqt4 仍然可以存在于您的 Anoconda 中,尽管它在“conda 列表”中不存在。即使您将后端从 Qt4Agg 更改为 Qt5Agg,matplotlib 仍然倾向于根据 Anaconda3\Lib\site-packages\matplotlib\backends\qt_compat.py 使用 Qt4Agg。

    因此,如果您为 Anaconda 安装了 pyqt 5.x,但在 Anaconda3\Lib\site-packages 中发现了 PyQt4 和 PyQt5,则应删除文件夹 PyQt4 并保留 PyQt5。

2赞 olmerg 6/1/2017 #6

我找到了解决这个问题的方法,我觉得最好不要降级包

import matplotlib
matplotlib.use('Qt5Agg')

文档

1赞 L. IJspeert 3/4/2018 #7

避免降级软件包的建议答案最终对我不起作用。但是,我找到了一个对我有用的简单修复程序。

查看“qt_compat.py”文件,问题似乎是 PyQt5 不在 sys.modules 中,而它应该在。我先尝试导入它,它起作用并解决了问题。

import PyQt5
import matplotlib.pyplot as plt
0赞 Lu Le 7/21/2018 #8

在我尝试为 PX4 安装 ROS-gazebo 模拟器后,出现了这个问题。好吧,在遵循所有解决方案后,我只是未能使其工作。幸运的是,我能够通过删除 /usr/lib/python2.7/dist-packages 下的 PyQt5 包来做到这一点。我正在使用 conda 环境,所以也许我在使用 sudo 命令安装损坏的软件包之前运行了一些脚本......不知道有什么魔力

0赞 Ron Mann 7/13/2019 #9

我遇到了同样的问题,并找到了我输入的导入字符串 'from PyQt5.QtCore import QObjects',应该是没有's'的'QObject' 与类定义相同。

评论

0赞 Tim 7/13/2019
在代码示例周围使用反引号,以使其内联格式化。例如from PyQt5.QtCore import QObjects