RuntimeError:sip模块实现API v8.0到v8.1,但PyQt4.QtCore模块需要API v7.1

时间:2012-02-17 19:06:47

标签: pyqt4 python-sip

我在 / tmp / yifli 下手动安装了PyQt-4.9.1和sip-4.13.2,因为当前安装在计算机上的程序(运行Fedora 13)对于我的软件而言太旧了。

之后,我将他们的位置添加到$ PYTHONPATH,这是sys.path的输出:

>>> import sys
>>> print sys.path
['', '/tmp/yifli/lib/python/site-packages', '/tmp/yifli/lib/python/site-packages/PyQt4',    '/usr/lib/python26.zip', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/Numeric', '/usr/lib/python2.6/site-packages/PIL', '/usr/lib/python2.6/site-packages/gst-0.10', '/usr/lib/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages/scim-0.1', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info', '/usr/lib/python2.6/site-packages/webkit-1.0']

然而,我得到的错误是由于旧的PyQt4仍然被使用的事实:

>>> import sip
>>> sip.__file__
'/tmp/yifli/lib/python/site-packages/sip.so'
>>> import PyQt4
>>> PyQt4.__file__
'/usr/lib/python2.6/site-packages/PyQt4/__init__.pyc'

怎么回事?

P.S。,我在编译Qt时遇到错误,抱怨Qt Phonon模块的某些头文件无法找到。但由于我不使用该模块,我只是忽略了它。

翼飞

1 个答案:

答案 0 :(得分:1)

首先,在/tmp中安装内容并不是一个好主意,因为它仅适用于临时文件(大多数系统都会设置为删除/tmp中的所有内容在启动或关机过程中)。

其次,您应该从不尝试修改您的系统python或其任何软件包 - 这几乎肯定会导致依赖于python的其他应用程序的破坏。如果您需要不同版本的python和/或其软件包,请在/usr/local下创建一个完全独立的安装。

有了这个,只需要确保在为它编译包时指定新的python。

所以,要编译Sip,你会这样做:

/usr/local/bin/python sip_source/configure.py

对于PyQt4,您也可以这样做 - 但还要添加一些其他选项,以避免覆盖系统文件:

/usr/local/bin/python pyqt4_source/configure.py \
--qsci-api-destdir /usr/local/lib/qt4/qsci --no-designer-plugin

设置完成后,您可以创建一个简单的包装脚本来运行需要升级的python的应用程序:

#!/bin/sh
exec /usr/local/bin/python myapp.py "$@"

请注意,您无需更改$PYTHONPATH即可使其中任何一项正常工作,因此您应撤消对其所做的任何更改。 (你可能还想考虑重新安装fedora sip和pyqt软件包,以确保一切都按原样放回。)

关于Phonon的错误,解决方案很简单:如果缺少头文件,请安装包含它们的fedora包。