win xp上使用pyqt5"/>
在win xp上使用pyqt5
想在win xp上使用pyqt5,但是发现官方并没有编译xp版的pyqt5。所以我就自己编译了一个,编译好的一个版本放在github上:[]
编译好的版本是python2.7+qt5.6.3+pyqt5.11 32bit
编译步骤记录如下:
xp支持的python和qt版本
-
Windows xp 不能运行python3.5及以上版本python。
-
Windows xp 不能运行qt5.7及以上版本qt。
-
Pyqt5官方预编译二进制文件不能在xp上运行。
-
Windows xp 能运行的最高版本的python版本为:python3.4和python2.7
-
Windows xp 上能运行的最高版本的qt为qt5.6.3
选择编译版本
编译PyQt5,需要PyQt5源码、PyQt5-sip,python、qt以及c++编译器。windows上C++编译器可以选择msvc或MinGW。
本文选择下列版本文件编译pyqt5
- python2.7
- qt5.6.3 32bit
- msvc2013
- PyQt5_gpl-5.11.3源码
- PyQt5-sip-4.19.13源码
因为python2.7比python3.4支持的库更多,所以使用python2.7编译pyqt5。
因为2018年qt5.6.3 msvc版只有msvc 2013,msvc 2015编译版,所以使用msvc2013。
如果想用python3.4 32bit的pyqt5,也可以根据本文编译
软件环境准备
编译pyqt5,需要下载
- pyqt5源码[下载]
- pyqt5-sip源码[下载](pyqt5需要使用sip编译)
- Qt5[下载]
- Visual Studio[下载](也可以使用MinGW,pyqt官方也是用vs,所以建议使用vs)
- python2.7[下载](必须有python才能编译)
python2.7
感觉python2.7的库比python3.4的库更多,比如Pythonocc就没有python3.4版本的,所以,我选择了python2.7 32bit,下载地址如下:
/。
Qt5
Qt5可以使用msvc编译器和mingw编译器,而msvc的编译器从2015开始就对xp的支持变差,就算通过各种编译配置命令设置,能xp下运行,但是会很可能发生一些奇奇怪怪的bug。而mingw编译器没有这个问题,同一个版本可以在xp win7 win10各个系统使用,而无需其他配置。
另外,Qt5目前有两个长期支持版本(Long Term Support)Qt5.6和Qt5.9,Qt5.6可以在XP和win7及以上系统开发,而Qt5.9只支持win7以上的系统开发和部署。 所以如果想使用Qt5的新功能,又想开发出的软件能在xp系统上运行,可以选择Qt5.6的mingw-32bit版本或者vs2013版本进行开发。
- Qt从5.7版本开始不再支持WinXP系统,即编译生成的exe文件无法在WinXP系统运行。
- Qt5.6是长期支持版本Long Term Support,它可以支持WinXP-32bit的系统。
参考:.6/supported-platforms.html
下载网站是:
- /
请注意,这几个版本是完全ok的:
- qt-opensource-windows-x86-msvc2013_64-5.6.3.exe
- qt-opensource-windows-x86-msvc2013-5.6.3.exe
- qt-opensource-windows-x86-mingw492-5.6.3.exe
vs2015编译出来的版本是不ok的,在WinXP环境下,会出现字体乱码(含删除线)的问题。
所以qt选择5.6.3版本。
Visual Studio
需要安装和qt版本相同的visual Studio。所以我使用vs2013。
下载地址:/
pyqt5 和 pyqt5-sip源码
虽然qt版本比较低,但是仍然可以使用最新版本的PyQt5和pyqt5-sip源码。但是我在编译的时候遇到了下边的问题,编译的时候禁止QtNfc就可以了
QAEXABVQNdefRecord@@@Z) 已经在 sipQtNfcQList0100QNdefRecord.obj 中定义
正在创建库 release\QtNfc.lib 和对象 release\QtNfc.exp
release\QtNfc.dll : fatal error LNK1169: 找到一个或多个多重定义的符号
所以我下载了:
- PyQt5_gpl-5.11.3.zip
- sip-4.19.13.zip
安装
- 安装python2.7
- 安装vs2013
- 安装qt5.6.3
- 解压PyQt5_gpl-5.11.3.zip到PyQt5_gpl-5.11.3文件夹
- 解压sip-4.19.13.zip到sip-4.19.13文件夹
编译安装sip
- 进入VS2013环境
- 在开始菜单中运行VS2013 x86 本机工具命令提示
- 也可以在cmd中执行命令: “D:\Program\Microsoft Visual Studio 12.0\VC\vcvarsall.bat” x86
- 也可以直接在cmd中执行: “C:\Program Files\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat”
- 进入sip目录
- cd sip-4.19.13
- 编译sip
- 配置编译参数:python configure.py --sip-module PyQt5.sip -b “out” -d “out\Lib\site-packages” -e “out\include” -v “out\sip” --target-py-version 2.7
- 切记一定要有–sip-module PyQt5选项,否则即使编译完全没有错误,最后运行也会出现“ValueError: PyCapsule_GetPointer called with invalid PyCapsule object”错误
- 编译:nmake
- 将编译后得到的文件安装到out目录下:nmake install
- 在这个阶段我们得到了sip.exe和sip.h,这两个文件仅用于编译PyQt5,PyQt5运行时不需要。
- 在这个阶段我们得到了sip.pyd文件,这个文件是PyQt5编译后运行需要的文件,将这个文件复制到Python27\Lib\sitepackages\PyQt5目录下就ok了。
- 配置编译参数:python configure.py --sip-module PyQt5.sip -b “out” -d “out\Lib\site-packages” -e “out\include” -v “out\sip” --target-py-version 2.7
编译PyQt5
- 进入Qt环境
- 在开始菜单中运行Qt 5.6.3 32-bit for Desktop (MSVC 2013)。
- 相当于直接在cmd中运行 “C:\Qt\Qt5.6.3\5.6.3\msvc2013\bin\qtenv2.bat”
- 进入VS2013环境
- 在cmd中执行命令: “D:\Program\Microsoft Visual Studio 12.0\VC\vcvarsall.bat” x86
- 进入pyqt5源码目录
- cd PyQt5_gpl-5.11.3
- 编译PyQt5
- 配置编译参数:python configure.py --sip-incdir=out\include --sip=out\sip.exe --qmake=C:\Qt\Qt5.6.3\5.6.3\msvc2013\bin\qmake.exe --no-sip-files --disable=QtNfc
- 为了加快编译速度我还禁止了很多其他模块:–disable=QtAndroidExtras --disable=QtDBus --disable=QtSensors --disable=QtSerialPort --disable=QtQml --disable=QtQuick --disable=QtBluetooth --disable=QtPositioning --disable=QtLocation
- 编译:nmake(时间比较长)
- 安装到python:nmake install
- 将会直接安装到python27/Lib/site-packages/PyQt5目录下,可以使用pip卸载。
- 配置编译参数:python configure.py --sip-incdir=out\include --sip=out\sip.exe --qmake=C:\Qt\Qt5.6.3\5.6.3\msvc2013\bin\qmake.exe --no-sip-files --disable=QtNfc
安装配置PyQt5
PyQt5还需要Qt5的dll文件以及插件文件夹,有两种方法
方法一:
直接把C:\Qt\Qt5.6.3\5.6.3\msvc2013\bin目录添加到path环境变量
方法二:
把C:\Qt\Qt5.6.3\5.6.3\msvc2013\目录下的bin文件夹和plugins文件夹复制到python27/Lib/site-packages/PyQt5目录下,然后编辑PyQt5目录下__init__.py文件,添加如下代码:
import os
dir=os.path.join(os.path.dirname(__file__),'bin;')
os.environ['path']=dir+os.environ['path']from PyQt5.QtWidgets import QApplication
QApplication.addLibraryPath(os.path.join(os.path.dirname(__file__),"plugins"));
注:使用vs2013编译的pyqt5,依赖VC12运行库,所以不要忘记msvcr120.dll和msvcp120.dll
32bit python2.7 版pyqt5编译安装成功,enjoy it!
更多推荐
在win xp上使用pyqt5
发布评论