pylab导入后,ipython调试器充斥着Qt错误

pylab导入后,ipython调试器充斥着Qt错误,python,ipython,ipdb,Python,Ipython,Ipdb,导入任何与pyqt相关的内容后,我无法在ipython中使用调试器。 如果我不导入任何东西并事后调试错误,比如 $ ipython3 In [1]: abc --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-

导入任何与pyqt相关的内容后,我无法在ipython中使用调试器。

如果我不导入任何东西并事后调试错误,比如

$ ipython3

In [1]: abc
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-03cfd743661f> in <module>
----> 1 abc

NameError: name 'abc' is not defined

In [2]: %debug
> <ipython-input-1-03cfd743661f>(1)<module>()
----> 1 abc

ipdb> 
$ipython3
在[1]中:abc
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在里面
---->1 abc
名称错误:未定义名称“abc”
在[2]中:%debug
> (1)()
---->1 abc
ipdb>
一切都很好,但如果我用pyqt5后端启动ipython3,我会得到

$ ipython3 --pylab=qt5

In [1]: abc
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-03cfd743661f> in <module>
----> 1 abc

NameError: name 'abc' is not defined

In [2]: %debug
> <ipython-input-1-03cfd743661f>(1)<module>()
----> 1 abc

ipdb> QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x2105860), parent's thread is QThread(0x1ccc6c0), current thread is QThread(0x7fe7940021f0)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x2105860), parent's thread is QThread(0x1ccc6c0), current thread is QThread(0x7fe7940021f0)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x2105860), parent's thread is QThread(0x1ccc6c0), current thread is QThread(0x7fe7940021f0)
QObject: Cannot create children for a parent that is in a different thread.
[...]
$ipython3--pylab=qt5
在[1]中:abc
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在里面
---->1 abc
名称错误:未定义名称“abc”
在[2]中:%debug
> (1)()
---->1 abc
ipdb>QObject:无法为位于不同线程中的父线程创建子线程。
(父线程是QApplication(0x2105860),父线程是QThread(0x1ccc6c0),当前线程是QThread(0x7fe7940021f0)
QObject:无法为位于不同线程中的父线程创建子线程。
(父线程是QApplication(0x2105860),父线程是QThread(0x1ccc6c0),当前线程是QThread(0x7fe7940021f0)
QObject:无法为位于不同线程中的父线程创建子线程。
(父线程是QApplication(0x2105860),父线程是QThread(0x1ccc6c0),当前线程是QThread(0x7fe7940021f0)
QObject:无法为位于不同线程中的父线程创建子线程。
[...]
我不是用qt开发的,我只是把它用作matplotlib的后端。我知道这个问题很模糊,但我不知道在哪里可以找到解决方案


我使用的是Ubuntu 18.04、Python 3.6.9、ipython 7.14.0、pyqt5 5.14.2。

就您的问题而言,我对该特定错误进行了几次搜索,我发现该错误完全属于
ipyhton
,因为类似的问题已经在上出现,如下所示:

同样的问题也给我留下了深刻的印象,但我还有其他选择。我已经使用
ipython
执行了几个测试来调试。下面是一些可以解决问题的组合

 - Either by using 
 ~$ ipython --pylab=qt5

 - Or by using 
 ~$ ipython3 --pylab=qt4

更新


你可以使用这两种方法中的任何一种来完成你的工作。但是要确保,你已经一个接一个地遵循了所有给定的步骤

方法1

  • 使用
    ipython--pylab=qt5
为此,请打开终端并运行以下命令:

~$ sudo killall apt apt-get
~$ sudo rm /var/lib/apt/lists/lock && sudo rm /var/cache/apt/archives/lock && sudo rm /var/lib/dpkg/lock* && sudo dpkg --configure -a && sudo apt update
~$ sudo killall apt apt-get
~$ sudo rm /var/lib/apt/lists/lock && sudo rm /var/cache/apt/archives/lock && sudo rm /var/lib/dpkg/lock* && sudo dpkg --configure -a && sudo apt update
之后,您必须按如下方式安装这些东西:

~$ sudo apt install libcanberra-gtk-module libcanberra-gtk3-module 
~$ sudo apt-get install python-pip
~$ pip install ipython
~$ sudo apt-get install python-pyqt5
~$ pip install pyside2 && pip install matplotlib
~$ sudo apt install libcanberra-gtk-module libcanberra-gtk3-module 
~$ sudo apt-get install python3-pip
~$ pip3 install ipython3
~$ sudo apt-get install python3-pyqt4
~$ pip3 install pyside2 && pip3 install matplotlib
安装完所有这些模块后,只需运行以下命令:
ipython--pylab=qt5
,您将看到除了少数异常情况,
ipython
进程将被实例化


方法2

  • 使用
    ipython3--pylab=qt4
为此,请打开终端并运行以下命令:

~$ sudo killall apt apt-get
~$ sudo rm /var/lib/apt/lists/lock && sudo rm /var/cache/apt/archives/lock && sudo rm /var/lib/dpkg/lock* && sudo dpkg --configure -a && sudo apt update
~$ sudo killall apt apt-get
~$ sudo rm /var/lib/apt/lists/lock && sudo rm /var/cache/apt/archives/lock && sudo rm /var/lib/dpkg/lock* && sudo dpkg --configure -a && sudo apt update
之后,您必须按如下方式安装这些东西:

~$ sudo apt install libcanberra-gtk-module libcanberra-gtk3-module 
~$ sudo apt-get install python-pip
~$ pip install ipython
~$ sudo apt-get install python-pyqt5
~$ pip install pyside2 && pip install matplotlib
~$ sudo apt install libcanberra-gtk-module libcanberra-gtk3-module 
~$ sudo apt-get install python3-pip
~$ pip3 install ipython3
~$ sudo apt-get install python3-pyqt4
~$ pip3 install pyside2 && pip3 install matplotlib
安装完所有这些模块后,只需运行以下命令:
ipython3--pylab=qt4
,您将看到
ipython
进程将被实例化


现在,您可以使用上述任何一种技术将其用作
matplotlib
的后端。以下是上述技术中一种测试的输出:

  • 使用
    ipython3--pylab=qt4

通过升级pip包“prompt\u toolkit”解决了此问题


对我来说,它从2.0.10版升级到了3.0.5版。

这不是一个Qt bug,而是一个ipython bug。你知道去哪里找吗?谢谢你的回答并仔细研究一下!遗憾的是,我对qt4也有同样的问题。关于
ipython
,也许它对你有效,因为它启动的是Python 2 shell而不是Python 3?不幸的是,这不是opti为我打开。然后你应该更新你的
Sudo
,并重新安装这个东西。我希望这能起作用。我必须在执行测试之前更新所有内容。我希望,我的努力会得到感谢。让我知道,我能为你提供进一步的帮助吗?谢谢,但这也不能解决问题。@Clemish我们能安排一次缩放聊天吗?让我跳进去你的机器解决了你的问题。我很感谢你的提议,但是没有。如果这个问题能通过更新所有软件包来解决,我就不会发布这样的问题。截至2020年8月中旬,prompt_toolkit现在是3.0.6。这对我来说不起作用,但在发布本文时,3.0.5为我解决了这个问题。