2016-09-19 178 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 
相關問題