虚拟机Ubuntu系统下Anaconda环境下打包pyqt程序


背景:在虚拟机Ubuntu系统Anaconda环境下使用pyinstaller打包pyqt5程序

问题1:dist文件夹大小为3.5G

问题2:dist文件夹下的程序启动文件打不开

问题3:dist文件夹下的程序启动文件打开后闪退

python打包win32api弹窗类的代码无法运行 python打包程序闪退_pyqt


通过对上述三个问题点进行分析查找原因,首先解决第1个问题,不然每一次打包都需要花费大量时间。

solution1:

网上看了几个帖子,说是因为anaconda环境导致的,所以直接使用指令:

conda deactivate

退出anaconda环境,然后再一次运行pyinstaller main.py,果然直接变小了,这次只有409.8M。虽然这个大小仍然很大,但是相比之前小多了,后续的优化就是细节上,只打包用到的库文件,不要把所有的库文件都打包。

python打包win32api弹窗类的代码无法运行 python打包程序闪退_库文件_02


solution2:

解决一下启动文件夹下程序双击启动打不开的问题2,我遇到了两种情况。

情况1:因为之前习惯使用uic.loadUI去直接加载.ui文件,最后发现用不了,我就把.ui文件直接转成.py文件,然后直接使用import导入到主程序中。这样就可以实现pyqt5的UI程序打包。

情况2:因为设计到一些大的库,比如cv2、meidiapipe之类的,网上查找到的方法是要把文件路径一起打包,可以直接使用指令

pyinstaller main.py --paths="/home/wangbadan/.local/lib/python3.8/site-packages/cv2"

或者也可以在main.spec中写入相关的文件路径,当然也包括引用的图片、文档等信息,关于如何写网上有详细的资料参考,如果不嫌麻烦的也可以安装带界面版的,网上也有人介绍过了。

python打包win32api弹窗类的代码无法运行 python打包程序闪退_文件路径_03


对于上述的两种方法,我个人感觉还是比较麻烦的,于是直接把引用的原文件夹直接copy过来试了试,结果可以解决问题,所以建议可以直接copy引用的文件夹到dist/名称 目录下。

另外再提一下,如何找到引用文件路径,我知道的有3种方法可以:

1:程序中打印

print(cv2.__file__)

2: 使用locate指令,不过可能会看到包含的文件比较多,不太好区分

locate cv2

3:直接再安装一次,这样会报错提示了之前已经在某个文件夹下安装过了

pip3 install cv2

以上方法都可以实现路径查找问题,由于本人属于新手小白,技术有限,都是从实践出发。

solution3:
最后解决一下问题3,在文件夹下使用命令

./main.py

可以看到哪里出问题和报错,然后根据信息解决就行。