PyQt5 错误“使用不正确的名称调用 PyCapsule_GetPointer”

新手上路,请多包涵

我刚刚在 OpenSUSE leap 上使用 python 3.6.3 在 pyenv virtualenv 中构建了 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 文档 中所述

原文由 Pedru 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

好吧,这实际上很简单,如文档( PyQt4PyQt5 )中所述,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-builder,请参阅 PyQt5 文档

原文由 Pedru 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

这奏效了。但是,当通过 PyCharm 的调试器运行应用程序时,我仍然遇到同样的错误。今天我发现 PyCharm 有一个选项可以与某个 PyQt5 版本“启用 PyQt5 兼容性”。在 Settings -> Debugger -> PyQt compatible 下禁用这个选项修复了这个问题。

原文由 Ghostkeeper 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题