使用pylab库导入后,ipython调试器会遭遇Qt错误。

5

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


1
这不是Qt的错误,而是ipython的错误。 - eyllanesc
有任何想法在哪里寻找? - clemisch
2个回答

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版本解决了我的问题。 - jdmcbr

0

就您的问题而言,我已经在特定的错误周围进行了一些搜索,并发现这个错误完全属于ipyhton,因为同样类型的问题已经在ipython官方github-issues上可用,如下所示:

我也遇到了同样的问题,但我有替代方案。我已经执行了一些测试来使用ipython进行调试。以下是一些可以解决您的问题的组合。

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

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

更新


您可以使用这两种方法中的任何一种来完成您的工作。但请确保您按照给定的步骤逐一进行。

Method.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,你会看到除了一些exceptions之外,ipython进程将被实例化。

Method.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

enter image description here


谢谢您的回答并关注此事!不幸的是,我在qt4中也遇到了同样的问题。关于ipython,也许它能够工作是因为它启动了Python 2 shell而不是Python 3?但这对我来说不是一个选项。 - clemisch
然后您应该更新您的Sudo并重新安装这些东西。我希望那会起作用。在执行测试之前,我必须更新所有内容。我希望我的努力会得到赞赏。请告诉我,我还能如何帮助您? - Muhammad Usman Bashir
我很感激你的提议,但是不需要了。如果更新所有软件包就能解决这个问题,我就不会在 Stack Overflow 上发帖问了。 - clemisch
这个问题是由于 ipython 本身造成的。你不必担心这个问题。但是这些替代方案很好用,因为我在使用与你在 github 上提供的相同规格的 两台其他同事的机器 上测试了相同的技术。 - Muhammad Usman Bashir
我正在使用 Ubuntu 18.04 作为我的操作系统。运行以下两个命令,并给我你的 Python sys_version 的输出结果。1. python -c "import IPython; print(IPython.sys_info())",2. python3 -c "import IPython; print(IPython.sys_info())" - Muhammad Usman Bashir
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接