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

1 投票
2 回答
6523 浏览
提问于 2025-04-17 23:21

我刚开始接触这个,英语也不太好,但我还是试试吧: 我在我的电脑上装了最新的Arch Linux,昨天我尝试安装SIP,这是一个用于将C++代码封装成Python代码的工具。 我在一个虚拟环境中尝试安装SIP和PyQt4。 我从AUR(Arch用户仓库)获取了SIP,并按照这个方法安装的:

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

我这样做是因为在SIP的官方文档网站上,我没搞清楚该在哪里安装和放在哪个目录。文档对我来说不太清楚。现在我知道,这个想法很愚蠢,因为当我尝试用以下命令运行一个Python脚本时:

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 后也遇到了同样的问题,错误依旧:

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

2 个回答

-1

你是在尝试安装 PyQt4 还是 PyQt5 呢?

你提到的内容是:

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

然后你试着导入 PyQt4:

from PyQt4 import QtCore, QtGui

显然我们遇到了同样的错误:PyQt5 - SIP API 10 级错误。需要 API 11

你能提供一下你的 PyQt5 目录里的内容吗?这样我可以和我的对比一下。

我觉得这可能是个 bug,因为在安装 PyQt5 时需要 sip-4.5.15,而这是最新的可用版本。

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

而且,我在网上也找不到关于 sip 包和它们对应的 API 级别的信息。

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

和你一样,我也在等待更多的信息。

2

如果你刚接触Arch Linux,还不太懂怎么操作,那就不要手动安装这些软件包!

你可以依赖于 [core]/[community] 这些官方的软件包,如果有些软件包没有官方支持,可以去AUR找找。

首先,问问自己:你为什么想在虚拟环境中安装这些东西?你真的需要虚拟环境来做你打算做的事情吗?另外,在Arch Linux上不要盲目跟随Ubuntu的教程,因为这些教程通常不适用……Ubuntu用户需要自己动手才能获得软件的最新功能,而Arch用户就不用担心了(因为Arch是滚动更新的)。

其次,下面这个错误

RuntimeError: the sip module implements API v11.0 but the PyQt4.QtCore module requires API v10.1

意思是 PyQt4.QtCore 在上次SIP更新后没有重新编译。只需要重新编译这个软件包就能解决问题。请注意,如果你使用官方的Arch软件包,这种错误是不会发生的。

所以,如果你想在Arch Linux上用Python 3安装PyQt5,首先要清除你在虚拟环境中做的所有操作,以避免冲突,然后:

sudo pacman -S python-pyqt5 sip

之后,运行 python file.py 就会调用Python 3,并使用官方正确安装的软件包。

撰写回答