ipython 调试器在导入 pylab 后充满了 Qt 错误
ipython debugger is flooded with Qt errors after pylab import
导入任何与 pyqt 相关的内容后,我无法在 ipython 中使用调试器。
如果我不导入任何东西并调试错误 post-mortem like
$ 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 开始使用 pyqt5 后端,我会得到
$ 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。
就您的问题而言,我围绕那个特定的 错误 进行了几次搜索,我发现这个错误完全属于 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
,你会看到很少exceptions
,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 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_toolkit"解决了问题
$ pip3 install --upgrade prompt_toolkit # optionally --user
对我来说,它从版本 2.0.10 升级到 3.0.5。
导入任何与 pyqt 相关的内容后,我无法在 ipython 中使用调试器。
如果我不导入任何东西并调试错误 post-mortem like
$ 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 开始使用 pyqt5 后端,我会得到
$ 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。
就您的问题而言,我围绕那个特定的 错误 进行了几次搜索,我发现这个错误完全属于 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
,你会看到很少exceptions
,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 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_toolkit"解决了问题$ pip3 install --upgrade prompt_toolkit # optionally --user
对我来说,它从版本 2.0.10 升级到 3.0.5。