2016-09-19 236 views
17

我收到以下导入错误。 这似乎与熊猫进口有关。我不确定如何调试/解决这个问题。ImportError:无法导入名称'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与Python 3

+0

不要忘了接受一个答案@阿布舍克 - 巴蒂亚 – georgedeath

+0

原来,这是由我的启动脚本IPython的魔术“%matplotlib QT”,这将尝试使用QT4造成的。 [用“%matplotlib qt5”替换它(https:// github。com/ContinuumIO/anaconda-issues/issues/1451)(或完全删除它)为我工作。 –

回答

23

降级的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

感谢Georgedeath,在那里我们可以更多地了解这个问题呢?我们可以跟踪哪些门票? –

+0

更新的答案包括问题@ AmelioVazquez-Reina – georgedeath

+1

修复matplotlib,但打破jupyter qtconsole –

5

为了避免降级,你也可以(如被tacaswell的问题建议)设置的后端使用Qt5Agg使用此处的方法之一:http://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环境的默认值。

+3

值得注意的是,这并不总是奏效,因为它不适合我。我先试了一下,但最后不得不使用我在答案中提到的方法。 – georgedeath

5

更新matplotlib的伎俩对我来说:

conda install matplotlib 
2

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

只有这个工作对我来说:

sudo pip install matplotlib --upgrade 
4

艾伦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,虽然这是在“畅达列表”缺席。即使您将后端从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

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

import matplotlib matplotlib.use('Qt5Agg')

documentation

1

建议的答案是避免降级的包并没有结束为我工作。不过,我发现了一个简单的修复方法,对我来说很有用。

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

import PyQt5 
import matplotlib.pyplot as plt 
相关问题