使用PyInstaller编译PyQt5应用失败:特定版本组合下问题未解决
我之前也碰到过和你完全一样的情况——用Python 3.6.4、PyQt 5.10.1和PyInstaller 3.3.1打包时,弹出一堆类似这样的警告:
WARNING: lib not found: api-ms-win-crt-runtime-l1-1-0.dll dependency of C:\users\justin\appdata\local\programs\python\python36-32\lib\site-packages\PyQt5\Qt\plugins\bearer\qgenericbearer.dll
最后生成的exe根本无法运行。你之前把Python目录加到PATH的思路没错,但针对这个dll缺失问题,还需要这些更针对性的处理:
手动补充系统DLL到打包目录
这个api-ms-win-crt-runtime-l1-1-0.dll是Windows系统的通用运行时库,32位Python对应的话,你可以去C:\Windows\SysWOW64目录里找到它(64位系统中,System32存放64位dll,SysWOW64存放32位dll)。把这个dll复制到你的打包脚本所在的文件夹,然后重新运行PyInstaller打包命令,通常就能解决依赖找不到的问题。升级PyInstaller到兼容版本
PyInstaller 3.3.1对Python 3.6和PyQt5.10的支持确实有不少bug,建议你升级到适配性更好的3.6版本(这个版本专门针对Python3.6做过优化):pip install pyinstaller==3.6升级后再尝试打包,很多自动依赖查找的问题都会被修复。
修改spec文件手动指定依赖路径
如果自动查找还是不行,就手动编辑生成的spec文件来强制指定依赖:- 先生成spec文件:
pyinstaller --name your_app your_script.py - 打开
your_app.spec,找到pathex和datas字段,把PyQt5插件目录和系统dll目录加进去:pathex=['C:\\users\\justin\\appdata\\local\\programs\\python\\python36-32\\lib\\site-packages\\PyQt5\\Qt\\plugins', 'C:\\Windows\\SysWOW64'] datas=[('C:\\users\\justin\\appdata\\local\\programs\\python\\python36-32\\lib\\site-packages\\PyQt5\\Qt\\plugins\\bearer\\qgenericbearer.dll', 'bearer')] - 最后用spec文件打包:
pyinstaller your_app.spec
- 先生成spec文件:
修复系统VC++运行时库
这个dll属于Visual C++ Redistributable for Visual Studio 2015-2019,如果你的系统里没装或者版本不匹配,也会导致找不到。下载对应你Python位数(32位)的VC++运行时安装包,安装完成后再重新打包试试。
内容的提问来源于stack exchange,提问作者code4days

