【问题标题】:PyQt5 error "PyCapsule_GetPointer called with incorrect name"PyQt5 错误“使用不正确的名称调用 PyCapsule_GetPointer”
【发布时间】:2019-01-12 14:36:12
【问题描述】:

我刚刚在 OpenSUSE 上使用 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 说原因可能是系统上的另一个问题,例如安装了 PyQt4,我试图从包管理器中卸载 PyQt4,但没有帮助。

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

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

编辑:

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

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

PyQt4 doc中所述

【问题讨论】:

    标签: linux python-3.x pyqt5 python-sip


    【解决方案1】:

    好的,实际上这很容易,如文档中所述(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 doc

    【讨论】:

    • 我遇到了类似的问题。你能解释一下你的解决方案吗?这个 configure.py 文件是什么?
    • 调用configure.pybuilding process的一部分,这仅适用于你自己构建PyQt
    • 我有同样的问题,但建议的配置会引发以下错误:python: can't open file 'configure.py': [Errno 2] No such file or directory。根据关于最后一部分的建议,我尝试使用 pip install --upgrade setuptools 更新 pip setuptools 但没有帮助。
    • 嗯,我是通过 pip3 安装的:pip3 install PyQt5-sip pip3 install PyQt5 -> 现在如何配置?
    • PyQt5 文档的链接断开
    【解决方案2】:

    对于后人,我在 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 下禁用此选项可修复此问题。

    【讨论】:

    • 我一直想知道那个选项有什么作用,激活或停用它有时可以解决问题。
    【解决方案3】:

    您的应用程序是否同时导入 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
    

    【讨论】:

    • 不幸的是,事实并非如此
    【解决方案4】:

    我将 PyQt5 降级到 5.7.1,它对我有用。

    【讨论】:

      【解决方案5】:

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

      在我的情况下,我只需要激活我的 virtual_environment 然后它就可以工作了。

      【讨论】:

        猜你喜欢
        • 2022-07-24
        • 1970-01-01
        • 2019-09-11
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        • 2017-10-14
        • 2022-12-06
        相关资源
        最近更新 更多