【问题标题】:ipython debugger is flooded with Qt errors after pylab importpylab 导入后,ipython 调试器充斥着 Qt 错误
【发布时间】:2020-05-22 19:01:27
【问题描述】:

导入任何与 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> 

一切都很好,但是如果我用 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.
[...]

我不是用qt开发的,我只用它作为matplotlib的后端。我知道这个问题很模糊,但我不知道去哪里寻找解决方案。

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

【问题讨论】:

  • 这不是 Qt 错误,而是 ipython 错误
  • 知道去哪里看吗?

标签: python ipython ipdb


【解决方案1】:

通过升级 pip 包“prompt_toolkit”解决了问题

$ pip3 install --upgrade prompt_toolkit  # optionally --user 

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

【讨论】:

  • 截至 2020 年 8 月中旬,prompt_toolkit 现在是 3.0.6。这对我不起作用,但截至本文发布时,3.0.5 为我解决了这个问题。
【解决方案2】:

就您的问题而言,我已经围绕该特定错误进行了几次搜索,我发现此错误完全属于ipyhton,因为同样的问题已经出现已在ipython official github-issues 上提供,如下所示:

我也遇到了同样的问题,但我有替代方案。我已经使用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 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

安装完所有这些模块后,只需运行这个命令:ipython --pylab=qt5,你会看到很少有exceptionsipython 进程将被实例化。


方法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 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

【讨论】:

  • 感谢您的回答并对此进行调查!可悲的是,我对 qt4 也有同样的问题。关于ipython,也许它对您有用,因为它启动的是 Python 2 shell 而不是 Python 3?不幸的是,这不是我的选择。
  • 那么你应该更新你的Sudo 并重新安装这些东西。我希望那会奏效。在执行测试之前,我必须更新所有内容。我希望,我的努力会得到赞赏。告诉我,我可以如何进一步帮助您?
  • 谢谢,但这也不能解决问题。
  • @clemisch 我们可以安排一次 Zoom 聊天吗?让我跳进你的机器来解决你的问题。
  • 我很欣赏这个提议,但没有。如果可以通过更新所有软件包来解决此问题,我将不会发布 SO 问题。
猜你喜欢
  • 2011-12-09
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多