参考:
https://blog.csdn.net/j_starry/article/details/82261807
https://www.jianshu.com/p/c451db99adca
一个小程序包括3个python文件,1个db文件。主窗口是login.py。help,hello是自建模块。用的python3.6,pyqt5.13.0
最后用的这个
pyinstaller --paths "C:\Users\yuyang\Anaconda3\Lib\site-packages\PyQt5\Qt\bin" -F -w login.py -p hello.py -p help.py --hidden-import hello --hidden-import help
具体每个参数的含义:
pyinstaller -F -w -i img.ico main.py
或
pyinstaller -F -c -i img.ico main.py
(建议先用-c,这样如果打包不成功的话可以看到哪里有错)
-F 指只生成一个exe文件,不生成其他dll文件
-w 不弹出命令行窗口
-i 设定程序图标 ,其后面的ico文件就是程序图标
main.py 就是要打包的程序
-c 生成的exe文件打开方式为控制台打开。
遇到的问题及解决办法:
1. python下面没有QT的动态链接库,就是这个路径:C:\Users\yuyang\Anaconda3\Lib\site-packages\PyQt5\Qt\bin
重新安装了PyQt5,在Pypi上下载的whl文件安装的。
2. 用 --paths定位到dll,在自己的电脑上没问题,但是别的就不行了。于是,在代码前面加一段重新打包就可以了。
from PyQt5 import QtCore, QtGui, QtWidgets
import sys, os
if hasattr(sys, 'frozen'):
os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
from PyQt5.QtWidgets import *