Python 打包兼容Win7 的Qt 程序
之前用PySide6 写了个上位机软件,在Win7 上不能运行,于是整了半天。主要是有两个问题:
- Python 版本兼容;
- Qt 版本兼容;
一、Python 版本兼容
搜到的回答都是说Python3.9 以后就不兼容Win7 了,所以得降版本到3.8。但是自己的代码降版本容易,库的版本要是降到3.8,新功能都用不了,还可能遇到旧版本的BUG 和性能问题。目前我用的一个核心库要求版本在3.10 以上,老版本不堪用,所以降版本代价挺大的。
好在找了个第三方编译的支持WIN7 的Python 版本,仓库:https://github.com/adang1345/PythonWin7。这位义士自己编译了3.9 以后的版本,支持Windows7 SP1。我本地安装了它的3.10.12 版本,用这个版本搭好环境,pyinstaller 一打包,拿到WIN7 就基本能跑了,日常我在WIN10 也可以直接用这个版本。
二、Qt 版本兼容
Python 本体能兼容Win7 以后,纯Python 写的库就可以直接运行了,Qt 这样的套壳库就不一定。Qt6 基本不兼容Win7,虽然搜到说可以自己想办法反向移植,但是算了,我们脚本小子整不来那种东西,所以就只好从PySide6 迁移到PyQt5。我的程序不算复杂,并不怎么依赖Qt6,可以无痛苦迁移到Qt5。以防以后还想再改回PySide6,弄了个单独的模块负责导入Qt 模块,其他脚本不直接导入Qt 库,以后改Qt 版本只要改这个模块就行。
'''
qt625.py让Pyside6 脚本尽量少修改的迁移到PyQt5
'''from PyQt5.QtWidgets import (QApplication,QWidget,QLabel,QMainWindow,QMessageBox,QTableView,QStyle,QLineEdit,QCheckBox,QRadioButton,QComboBox,QFormLayout,QTableWidgetItem,QSpinBox,QDoubleSpinBox,
)from PyQt5.QtGui import (QStandardItemModel,QStandardItem,QColor,QFont,QPalette,QStandardItem,QStandardItemModel,QCloseEvent,QTextCursor,
)from PyQt5.QtCore import (Qt, QObject,QThread,QModelIndex,QPointF,QCoreApplication,QSettings
)from PyQt5.QtCore import pyqtSignal as Signal
from PyQt5.QtCore import pyqtSlot as Slot
就这么简单。后续功能升级要是用到了其他复杂的库,比如numpy 之类的,版本问题估计还得喝一壶,但是现在暂时不用考虑。