ImportError:无法导入名称'QtCore'

时间:2016-09-19 13:38:42

标签: python anaconda python-import qtcore

我通过以下导入获得以下错误。 它似乎与大熊猫导入有关。我不确定如何调试/解决这个问题。

进口:

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和anaconda发布的python 3。

8 个答案:

答案 0 :(得分:23)

将pyqt版本5.6.0降级到4.11.4,将版本从5.6.0降级到4.8.7修复了这个问题:

strtolower()

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

答案 1 :(得分:5)

为避免降级,您也可以(正如问题中的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环境中的默认值。

答案 2 :(得分:5)

更新matplotlib对我有用:

conda install matplotlib

答案 3 :(得分:4)

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,你的Anoconda中仍然可以存在pyqt4,尽管它在“conda list”中不存在。即使您将后端从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。

答案 4 :(得分:2)

我尝试了以上所有但失败了。

只有这对我有用:

sudo pip install matplotlib --upgrade

答案 5 :(得分:2)

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

import matplotlib
matplotlib.use('Qt5Agg')

documentation

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我遇到了同样的问题,发现我输入的导入字符串 “从PyQt5.QtCore导入QObjects”,并且应为“ QObject”,不带“ s” 与类定义相同。