按照网上的教程安装好pyqt进行开发,这里不再赘述。到了打包这一环节,我使用的是pyinstaller。
pyinstaller打包会将很多无用的包添加到你的应用中,所以在打包之前最好新建一个环境,把开发好的工程在这个新环境中run一下,缺少什么模块再在这个新环境中安装什么模块,保证这个新环境只有这一个工程需要的包。并且,在你的.py中也不要导入用不到的包。
首先安装pyinstaller: 不知道这一步对于成功编译有没有影响,但是我在踩坑中查到有资料说是这样安装,好吧,就这样安装。
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
在接下来,我们使用:
pyinstaller -F -w main.py
打包文件,等一段时间会产生一个dist文件,在这个文件夹下有一个main.exe的执行文件,如果一切正常,不出意外,你双击这个exe就能运行你的程序,但是,实际上90%的人都会出现各种问题。但是这中打包方式执行的时候不会提示错误信息,顶多会提示一个:
failed to excute script..... 类似的提示
因此要通过以下语句打包:
pyinstaller -F -c main.py
同样会生成一个main.exe,这个时候我们在命令行中执行main.exe,就会提示报错信息,例如:
File "main.py", line 2, in <module>
ModuleNotFoundError: No module named 'sip'File "main.py", line 2, in <module>
ModuleNotFoundError: No module named 'PyQt5.QtGui'......
解决方法是,在你的py文件中导入缺失的库,没有的库使用pip安装上,比如:pip install sip。
import sip
from PyQt5 import QtGui
当我们把所有缺失的module都显示的在py文件中导入后,再执行这一句:
pyinstaller -F -c main.py
在命令行中执行main.exe后可能回报这样的错:
This application failed to start because it could not find or load the Qt platform plugin "windows"
in "".
我的解决方法是,在exe的同级目录下新建一个platforms的文件夹,把pyqt安装路径下的以下.dll文件复制进去:
OK,不出意外,现在就可以执行了。使用:
pyinstaller -F -w main.py
重新打包,就可以双击执行。你也可以把这个包含exe的文件夹压缩,这样就可以把他分发给你的用户了。