无法在 python 中导入模块:PyQt4 与 SIP 冲突

Posted

技术标签:

【中文标题】无法在 python 中导入模块:PyQt4 与 SIP 冲突【英文标题】:Can't import modules in python: PyQt4 conflicts with SIP 【发布时间】:2014-03-21 20:56:02 【问题描述】:

我是新手,我的英语不是很好,但我来了: 我的 PC 上有最新的 Arch Linux,昨天我尝试安装 SIP,这是一个用于包装 C++ 代码的 Python 代码生成器。 我尝试在虚拟环境下安装 SIP 和 PyQt4。 我从 AUR 获得 SIP,并以这种方式安装它:

http://lucacerone.net/2013/08/installing-pyqt4-and-sip-in-a-virtual-environment-ubuntu-1204/#.Uyx-dGd_phF/

我这样做是因为在官方 SIP 文档网站上,我不知道在哪里安装它以及安装在哪个目录中。文件对我来说不是很清楚。我现在知道,这是一个非常愚蠢的想法,因为当我尝试使用以下命令运行 pyhton 脚本时:

python file.py

我遇到错误是因为我使用的是 Python 3.3.4:

[vain@chinchi2 python_programme]$ python test.py
Traceback (most recent call last):
  File "test.py", line 25, in <module>
    import matplotlib.pyplot as plt
  File "/usr/lib/python3.3/site-packages/matplotlib/pyplot.py", line 98, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/usr/lib/python3.3/site-packages/matplotlib/backends/__init__.py", line 28, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "/usr/lib/python3.3/site-packages/matplotlib/backends/backend_qt4agg.py", line 13, in <module>
    from .backend_qt4 import QtCore, QtGui, FigureManagerQT, FigureCanvasQT,\
  File "/usr/lib/python3.3/site-packages/matplotlib/backends/backend_qt4.py", line 21, in <module>
    import matplotlib.backends.qt4_editor.figureoptions as figureoptions
  File "/usr/lib/python3.3/site-packages/matplotlib/backends/qt4_editor/figureoptions.py", line 13, in <module>
    import matplotlib.backends.qt4_editor.formlayout as formlayout
  File "/usr/lib/python3.3/site-packages/matplotlib/backends/qt4_editor/formlayout.py", line 51, in <module>
    from matplotlib.backends.qt4_compat import QtGui,QtCore
  File "/usr/lib/python3.3/site-packages/matplotlib/backends/qt4_compat.py", line 56, in <module>
    from PyQt4 import QtCore, QtGui
RuntimeError: the sip module implements API v11.0 but the PyQt4.QtCore module requires API v10.1

我究竟应该改变什么?我也试过了:

sudo pacman -S pyqt5-common 5.2-1 [installed]

(python-pyqt5和python2-pyqt5共享的常用PyQt文件)和:

pacman -Sy python-qscintilla-common

可能存在错误的库依赖,我该如何解决?


哦, 我想安装 PyQt5 但我遇到了同样的问题,我做了同样的错误: python configure.py make sudo make install

full/virtualenv/path/build/SIP/sip-4.15.5/ 我又遇到了同样的错误:

from PyQt4 import QtCore, QtGui RuntimeError: the sip module implements API v11.0 but the PyQt4.QtCore module requires API v10.1 [vain@chinchi2 python_programme]$ python2 erstenprog.py Traceback (most recent call last): File "erstenprog.py", line 26, in <module> import matplotlib.pyplot as plt ImportError: No module named matplotlib.pyplot

我很沮丧,因为我用英语和德语写信给arch linux论坛,我没有得到答复,只能卸载它。

我该怎么做? 我应该听从这里的建议: http://lucacerone.net/2013/08/installing-pyqt4-and-sip-in-a-virtual-environment-ubuntu-1204/#.Uyx-dGd_phF/

我应该将 PyQt5 集成到:

full/virtualenv/path/build/PyQT5

因为它已经存在于

lib/python3.3/site-packages/PyQt5.

【问题讨论】:

【参考方案1】:

如果您是 Arch Linux 的新手并且不知道自己在做什么:不要手动安装这些软件包!

您可以依赖[core]/[community] 包,如果某些包不受官方支持,则可以依赖 AUR。

首先:为什么要将这些安装在 virtualenv 中?你真的需要一个 virtualenv 来完成你的计划吗?另外,当你在 Arch Linux 上时,不要盲目地遵循 Ubuntu 教程,因为这些教程通常不会被改编……Ubuntu 用户需要亲自动手才能获得他们软件的最新功能。不是 Arch 用户(为获胜而滚动发布)。

第二个:如下错误

RuntimeError: sip 模块实现 API v11.0 但 PyQt4.QtCore 模块需要 API v10.1

表示PyQt4.QtCore 在上次 SIP 更新后没有重新编译。只需重新编译包即可解决问题。请注意,如果您使用 Arch 官方包,则不会发生此类错误。

所以,如果你想在 Arch Linux 上使用 Python 3 安装 PyQt5,首先删除你在 virtualenv 中所做的一切以防止冲突,然后:

sudo pacman -S python-pyqt5 sip

之后,运行python file.py 将调用带有官方正确安装的包的Python 3。

【讨论】:

【参考方案2】:

您是要安装 PyQt4 还是 PyQt5?

如你所指

sudo pacman -S pyqt5-common 5.2-1 [installed]

并尝试导入 PyQt4:

from PyQt4 import QtCore, QtGui

显然我们面临同样的错误:PyQt5 - SIP API 10 level error. API 11 required

能否提供您的 PyQt5 目录内容?只是为了和我的比较。

我认为这是一个错误,因为 PyQt5 安装需要 sip-4.5.15 并且最新版本可用。

... 或者 PyQt5 使用另一个 sip,但我找不到任何关于这种配置的信息。

此外,我在网上找不到有关 sip 包及其相应 API 级别的信息。

我在这里记录安装失败和分析进度: http://www.hznteam.fr:5000/trac-bubble/ticket/102

我正在等待更多信息。

【讨论】:

以上是关于无法在 python 中导入模块:PyQt4 与 SIP 冲突的主要内容,如果未能解决你的问题,请参考以下文章

无法在 python 脚本中导入 google.cloud 模块

无法在 Python 中导入我自己的模块

我无法使用 PythonKit 在 Xcode 11 中导入 Python 模块

尽管尝试了多个建议,但无法在 Python 中导入本地模块

无法在 Python 中导入位置设置为 PYTHONPATH 的模块

无法使用 Jupyter 笔记本在 Python 中导入自定义模块