pyinstaller 坑点:
- python 3.8 与 pyinstaller 3.5不兼容
- pyinstaller 打包opencv2程序为exe后没有响应
- pyinstaller 打包后的GUI界面中使用多线程/多进程的时候界面会重复出现多个(和线程个数相同)
python 3.8 与 pyinstaller 3.5不兼容
当前pyinstaller 只支持到3.7版本python,如果当前使用python版本超过3.7,有2种解决方案:
-
降低本地编译器python版本
-
使用开发版pyinstaller,安装开发版pyinstaller命令如下:
pip instal https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
pyinstaller 打包opencv2程序为exe后没有响应
pyinstaller打包exe的时候不会自动给opencv2的程序打包到exe中,所以需要手动添加依赖
-
找到项目中所依赖的dll
-
pycharm的话可以到项目路径\venv\Lib\site-packages\cv2 下找到对应的dll文件
-
使用环境变量的python可以到PYTHON_HOME\venv\Lib\site-packages\cv2 \
如:
C:\Program Files\Python37\Lib\site-packages\cv2
-
-
在代码中加上下面这行代码
import ctypes try: temp = ctypes.windll.LoadLibrary('opencv_videoio_ffmpeg420_64.dll') except: pass
-
将dll文件拷贝到打包文件同级目录
pyinstaller 打包后的GUI界面中使用多线程/多进程的时候界面会重复出现多个(和线程个数相同)
原本这个问题是在使用多进程情况下出现的,但是当开发环境切换为多线程后此问题解决。
之所以将这个问题归纳到pyinstaller坑点的原因是因为当它打包后这个问题再一次出现!!!
目前尚未找到解决方案
pyinstaller 的常用参数
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标
-c 使用控制台,无窗口
-D 创建一个目录,里面包含exe以及其他一些依赖性文件
-h 来查看参数
备注:尽量不要使用python来做exe 会出现一大堆奇怪的问题