2016-09-19 4 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' 

Debugging:

$ 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 с распределением анаконды питона 3.

+0

Не забудьте принять ответ @ Абхишек-Бхатья – georgedeath

+0

Оказывается, это было вызвано IPython магии «% Matplotlib кварты» в моем сценарии запуска, который будет пытаться использовать qt4. [Замена его на «% matplotlib qt5»] (https: // github.com/ContinuumIO/anaconda-issues/issues/1451) (или удаление целиком) работал для меня. –

ответ

23

Downgrading 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

Например, вы можете изменить файл matplotlibrc, расположенный в /your/path/to/anaconda3/envs/yourenv/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc, и изменить бэкэнд-линию на backend : Qt5Agg. Это сделает базовый компонент Qt5Agg по умолчанию во всей окружной среде yourenv.

+3

Стоит отметить, что это не всегда работает, поскольку это не для меня. Я попробовал это первым, но в итоге мне пришлось использовать метод, который я изложил в своем ответе. – georgedeath

5

Обновление Matplotlib сделал трюк для меня:

conda install matplotlib 
2

Я попробовал все выше, но не удалось.

Только это работает для меня:

sudo pip install matplotlib --upgrade 
4

решение Аллана Зеленер работает для меня.В качестве дополнения,

  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. Если вы обновляли pyqt5 от PyQt4, PyQt4 все еще может существовать в вашем Anoconda, хотя он отсутствовал в списке «Конда». Даже если вы изменили бэкенд от Qt4Agg до Qt5Agg, matplotlib все еще имел тенденцию использовать Qt4Agg в соответствии с Anaconda3 \ Lib \ site-packages \ matplotlib \ backends \ qt_compat.py.

    Поэтому, если вы установили pyqt 5.x для Anaconda, но нашли и PyQt4 и PyQt5 в Anaconda3 \ Lib \ site-packages, вы должны удалить папку PyQt4 и оставить PyQt5 в одиночку.

2

Я нашел способ решить эту проблему, я думаю, что лучше не ухудшать пакет

import matplotlib matplotlib.use('Qt5Agg')

documentation

1

Предложенные ответы, которые избегают Откат пакетов не закончились работая для меня. Однако я нашел простое исправление, которое действительно сработало для меня.

Просматривая файл «qt_compat.py», проблема заключается в том, что PyQt5 не находится в sys.modules, хотя это должно быть. Сначала я попытался импортировать его, что сработало и устранило проблему.

import PyQt5 
import matplotlib.pyplot as plt 
Смежные вопросы