PyQt5 错误 "PyCapsule_GetPointer called with incorrect name"
PyQt5 error "PyCapsule_GetPointer called with incorrect name"
我刚刚在 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'
我读到 here 原因可能是系统上的另一个 sip,例如 PyQt4 安装,我尝试从包管理器中卸载 PyQt4 但没有帮助。
我不知道该怎么做,有什么想法吗?
如果我安装 python3-qt5 包并使用系统 python 它可以工作
编辑:
我在 OpenSUSE Leap 15 的另一台机器上使用 PyQt4 时遇到了同样的问题,解决方案是配置 sip:
python configure.py --sip-module PyQt4.sip --no-dist-info --no-tools
中所述
您的应用程序是否同时导入了 PyQt4 和 5?
我在 windows 上看到了第一个错误:
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:\Python37\python.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
好的,这实际上很简单,如文档中所述 (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-builder,见 PyQt5 doc
我将 PyQt5 降级到 5.7.1,它对我有用。
所以对我来说,当我尝试使用 pyuic5.
时发生了这个错误
在我的例子中,我只需要激活我的 virtual_environment 然后它就起作用了。
为了后代,我在我的 PyQt5 应用程序中遇到此错误很长一段时间,因为我使用了两个自定义库(libArcus 和 libSavitar),它们也使用 SIP 来编译 Python 绑定。通过确保在 PyQt5 之前首先导入我的自定义库(使用较新的 SIP 版本)最终解决了这个问题:
这成功了。然而,当 运行 应用程序通过 PyCharm 的调试器时,我仍然遇到同样的错误。今天我发现 PyCharm 可以选择 "enable PyQt5 compatibility" 与某个 PyQt5 版本。在 Settings -> Debugger -> PyQt compatible 下禁用这个选项修复了这个问题。
我刚刚在 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'
我读到 here 原因可能是系统上的另一个 sip,例如 PyQt4 安装,我尝试从包管理器中卸载 PyQt4 但没有帮助。
我不知道该怎么做,有什么想法吗?
如果我安装 python3-qt5 包并使用系统 python 它可以工作
编辑:
我在 OpenSUSE Leap 15 的另一台机器上使用 PyQt4 时遇到了同样的问题,解决方案是配置 sip:
python configure.py --sip-module PyQt4.sip --no-dist-info --no-tools
中所述
您的应用程序是否同时导入了 PyQt4 和 5?
我在 windows 上看到了第一个错误:
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:\Python37\python.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
好的,这实际上很简单,如文档中所述 (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-builder,见 PyQt5 doc
我将 PyQt5 降级到 5.7.1,它对我有用。
所以对我来说,当我尝试使用 pyuic5.
时发生了这个错误在我的例子中,我只需要激活我的 virtual_environment 然后它就起作用了。
为了后代,我在我的 PyQt5 应用程序中遇到此错误很长一段时间,因为我使用了两个自定义库(libArcus 和 libSavitar),它们也使用 SIP 来编译 Python 绑定。通过确保在 PyQt5 之前首先导入我的自定义库(使用较新的 SIP 版本)最终解决了这个问题:
这成功了。然而,当 运行 应用程序通过 PyCharm 的调试器时,我仍然遇到同样的错误。今天我发现 PyCharm 可以选择 "enable PyQt5 compatibility" 与某个 PyQt5 版本。在 Settings -> Debugger -> PyQt compatible 下禁用这个选项修复了这个问题。