无法在 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 模块
我无法使用 PythonKit 在 Xcode 11 中导入 Python 模块