PyQt5 错误"PyCapsule_GetPointer called with incorrect name"



我刚刚用OpenSUSE leap上的python 3.6.3在pyenv虚拟环境中构建了PyQt5,构建很顺利,但当我导入时

>>> from PyQt5 import QtCore
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: PyCapsule_GetPointer called with incorrect name

我可以导入PyQt5,但我不能使用下的模块

>>> import PyQt5
>>> PyQt5.QtCore
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'PyQt5' has no attribute 'QtCore'

我在这里读到,原因可能是系统上的另一个sip。例如,在安装PyQt4时,我试图从包管理器中卸载PyQt4,但没有帮助。

我不知道该怎么办,有什么想法吗?

如果我安装python3-qt5包并使用系统python,它可以正常工作

编辑:

我在OpenSUSE Leap 15上的另一台机器上使用PyQt4也遇到了同样的问题,解决方案是使用配置sip

python configure.py --sip-module PyQt4.sip --no-dist-info --no-tools

如PyQt4文档中所述

好的,所以这实际上很容易,正如文档(PyQt4,PyQt5(中所述,SIP必须使用--sip-module选项进行配置,所以对于PyQt5:

python configure.py --sip-module PyQt5.sip --no-tools

对于PyQt4:

python configure.py --sip-module PyQt4.sip --no-tools

这适用于PyQt>=4.12.2和PyQt>=5.11

编辑:PyQt5现在有了所谓的PyQt构建器,请参阅PyQt5-doc

所以对我来说,这个错误是在我尝试使用pyuic5时发生的。

在我的情况下,我只需要激活我的虚拟环境,然后它就工作了。

对于子孙后代,我在PyQt5应用程序中有很长一段时间出现了这个错误,因为我使用了两个自定义库(libArcus和libSavitar(,它们也使用SIP来编译Python绑定。通过确保我的自定义库(使用较新的SIP版本(在PyQt5:之前首先导入,这一问题最终得到了解决

https://github.com/Ultimaker/Cura/blob/b20a349b4454d08e34b3c3ea3f537a380e4c7696/cura_app.py#L140-L141

这起到了作用。然而,当通过PyCharm的调试器运行应用程序时,我仍然得到了相同的错误。今天,我发现PyCharm有一个选项可以"启用PyQt5兼容性"与某个PyQt5版本。在"设置"->"调试器"->"PyQt兼容"下禁用此选项修复了此问题。

您的应用程序是否同时导入PyQt4和5?

我看到了窗口上的第一个错误:

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Executable: D:Python37python.exe
>>> from PyQt5 import QtWidgets
>>> from PyQt4 import QtGui, QtCore
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: PyCapsule_GetPointer called with incorrect name

我将PyQt5降级为5.7.1,它对我有效。

相关内容