【问题标题】:ImportError: cannot import name 'QtCore'ImportError:无法导入名称“QtCore”
【发布时间】:2017-01-27 05:31:07
【问题描述】:

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

进口:

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 发行版。

【问题讨论】:

  • 别忘了接受@abhishek-bhatia 的回答
  • 原来这是由我的启动脚本中的 ipython 魔法“%matplotlib qt”引起的,它会尝试使用 qt4。 Replacing it with "%matplotlib qt5"(或完全删除)对我有用。
  • 检查from PyQt5.QtCore import QObject 是否有效。
  • 你在 QObject 中添加了 's' 吗?

标签: python anaconda python-import qtcore


【解决方案1】:

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

【讨论】:

  • 在代码示例周围使用反引号` 将它们格式化为内联格式。例如from PyQt5.QtCore import QObjects
【解决方案2】:

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

import matplotlib
matplotlib.use('Qt5Agg')

documentation

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      import PyQt5
      import matplotlib.pyplot as plt
      

      【讨论】:

        【解决方案5】:

        Allan Zelener 的解决方案对我有用。作为补充,

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

          • $PWD/matplotlibrc(当前目录)

          • $MATPLOTLIBRC/matplotlibrc

          • $MPLCONFIGDIR/matplotlibrc

          • 在 Linux 上,

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

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

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

          • 在其他平台上,

            • $HOME/.matplotlib/matplotlibrc 如果定义了 $HOME
          • 最后,它在$MATPLOTLIBDATA/matplotlibrc 中查找 系统定义的副本。

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

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

        【讨论】:

          【解决方案6】:

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

          只有这对我有用:

          sudo pip install matplotlib --upgrade
          

          【讨论】:

            【解决方案7】:

            更新 matplotlib 对我有用:

            conda install matplotlib
            

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

              • 值得注意的是,这并不总是有效,因为它不适合我。我首先尝试了这个,但最终不得不使用我在回答中所说的方法。
              【解决方案9】:

              将 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

              【讨论】:

              • 感谢 Georgedeath,我们在哪里可以了解有关此问题的更多信息?有我们可以追踪的票吗?
              • 更新答案以包含问题@AmelioVazquez-Reina
              • 修复了 matplotlib,但破坏了 jupyter qtconsole
              • 我只是在降级 Qt 后得到一个不同的错误:ImportError: libSM.so.6: cannot open shared object file: No such file or directory
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-03-31
              • 2014-10-10
              • 2014-09-20
              • 2014-08-28
              • 2014-06-10
              • 2016-05-16
              • 2019-05-25
              相关资源
              最近更新 更多