背景
之前分享的一款工具软件(*.exe)收到了用户反馈,称其在运行时出现异常、闪退等问题。经过沟通了解到,这些用户仍在使用早已停止更新维护的Windows 7系统。
虽然目前大多数用户已经迁移到了Win10或Win11系统,但仍有一部分用户由于各种原因继续使用Win7,其中很多人使用的是32位版本的Win7。为了确保我的软件能够在这些环境中正常运行,我决定创建一个适配Win7 32位系统的开发环境,并将项目迁移至该环境中进行测试和调试。
环境搭建:创建32位Python 3.6环境
我当前使用的64位Win10系统上已经安装了miniconda3(64位),它默认会安装64位版本的Python环境。为了模拟Win7 32位系统的运行环境,需要使用Conda创建一个32位的Python 3.6环境。
conda create --name Py36_32 python=3.6 --platform win-32
这条命令会使用Conda创建一个名为Py36_32
的虚拟环境,并且指定了平台为win-32
,这样就能保证生成的Python解释器和相关库都是32位的。
创建完成后,激活该环境:
conda activate Py36_32
当然,根据实际需要也可以考虑使用Python2.7等早期版本
安装兼容版本的第三方库
接下来,我开始尝试安装项目所需的第三方库。由于目标环境是Python 3.6,而且是32位的,很多现代的库可能不支持这个版本,或者只有特定版本才支持。
为了提高安装成功率,我使用了国内镜像源加速下载过程,并尝试不同版本的库进行适配。
pip install 包名==指定版本 -i https://pypi.tuna.tsinghua.edu.cn/simple
有时还需要手动下载特定版本的.whl
文件进行本地安装:
pip install 包名.whl
在这个过程中,还遇到了一些库API变更的问题,比如类名、方法名或常量名发生了变化。对此,一般适当调整代码以适配旧版本的库就可以了。
使用PyInstaller打包为.exe
完成环境配置和依赖安装后,就可以使用PyInstaller将Python脚本打包成独立的可执行文件(.exe),以便于在Win7系统上运行。
安装PyInstaller:
pip install pyinstaller
打包命令如下:
pyinstaller -F -w 你的脚本.py -i 你的图标.ico
-F
表示将所有依赖打包成一个单独的.exe
文件。-w
表示隐藏控制台窗口(适用于GUI程序)。-i
指定应用程序图标。
打包完成后,可在dist/
目录下找到生成的.exe
文件。
测试与部署
首先在Win10/Win11系统上测试了生成的.exe
文件是否能正常运行,随后将其部署到Win7系统中进行验证。
测试发现,某些情况下仍然会出现兼容性问题,例如缺少某些系统组件或动态链接库。这时可以通过以下方式解决:
- 确保Win7系统已安装最新的补丁(可通过360安全卫士等工具进行更新)
- 手动安装VC++运行库(如vcredist_x86)
最终,通过上述步骤生成的.exe
程序可以在Win7 32位系统上稳定运行,解决了用户的闪退问题。
总结
虽然Win7已经停止官方支持,但仍有相当一部分用户在使用。作为开发者,我们需要考虑到这部分用户的实际需求,在不影响功能的前提下,尽量保持对旧系统的兼容性。
关于如何低成本在用户可能使用的系统中进行测试:
- 用于测试的win7系统可以通过虚拟机进行安装,也可以从官网下载iso镜像进行安装。(可能导致无法高效利用NVIDIA显卡等硬件资源的情况)
- 在开发机中安装双系统,例如Win10和Win7。(可正常使用开发机的硬件资源,但需要占用额外的磁盘空间)
- 临时租用一台Win7系统云服务器进行测试。(建议快速完成临时性的测试,避免增加租用的成本)