诸如安装、spyder打不开等问题见前文阿雪的学习记录|Anaconda安装PyQt5、pyinstaller打包等相关问题解决
1. 打包用指令
pyinstaller xxx.py --noconsole --hidden-import PyQt5.QtXml
2. 打包时出现WARNING: lib not found: ……
命令行
不要理会,不要理会,不要理会
3. 打包卡在Building COLLECT COLLECT-00.toc
太久
没找到原因,但是最终会成功,所以不解决这个问题,就等等吧
4. 双击exe显示找不到ui
打包完成后需要将xx.ui
复制到dist-xx文件夹里
5. 双击dist-xx.exe运行,出现ImportError DLL load failed 找不到指定的程序
这个问题包括但不限于本身,就双击exe文件后只要弹出一个带有红色圆形叹号的对话框说缺什么,什么加载失败,什么版本不匹配,这些我都遇到过,分别是:
no modules named 'sip'
ImportError DLL load failed 找不到指定的程序
错误RuntimeError: the sip module implements API v11.0 to v11.2 but the module requires API v12.0
我的方法是更新所有过期包(或者说可更新的包),方法如下:
首先install pip-review:
pip install pip-review
然后自动更新所有可更新的包:
pip-review --auto --use-deprecated=legacy-resolver
这里需要注意,--use-deprecated=legacy-resolver
这句非常重要,如果只写pip-review --auto
的话,会出现pip is looking at multiple versions of sniffio to determine which version is compatible
的提示,然后很多包它都会把满足条件的所有whl或者gz文件下载下来,等到公司大门都关了都下不完,非常慢非常慢,根本等不到它弄完,所以必须要加后面那半句,必须!然后很快就更新好了,此时删除上一次打包出来的dist、build、_pycache_文件夹,重新打包,和上面流程一样,再运行exe文件就成功打开了。
我感觉之所以要自动更新,是因为写代码的时候是缺一个pip一个,所以可能它每次pip的包是匹配于其他老包的,程序也可以正常运行,但是当打包的时候就不符合了,整体更新后所有包一块匹配,这也是为什么不加后半句会很慢,它需要匹配各个包的版本。
更新到最后会有一个错误:ERROR 1: Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
不要理会它,因为打包这件事不能有wrapt这个包,我就以为需要所以用pip install -U --ignore-installed wrapt enum34 simplejson netaddr
把它给装上了,完了运行打包命令的时候告诉我因为有这个包在所以失败了,大概是这么个错误信息...fails when python-wrapt system package is installed on...
,所以又给它uninstall了才打包成功
6. 未完待续
每天学一点点,就能少菜一点点,加油( •̀ ω •́ )y
(久违的小尾巴)