1.确认python脚本可以在python3.x下执行,我的脚本为DaZo.py, python版本为3.7
2.安装Pyinstaller
3.打包python脚本,参考一下:
pyinstaller -F -w -pD:\tmp\core-python\libs -i d:\tmp\main.ico DaZo.py
-F 表示生成单个可执行文件;
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!;
-c –console, –nowindowed 使用控制台,无界面(默认);
-p 表示你自己自定义需要加载的类路径,一般情况下用不到;
-i 表示可执行文件的图标。
4.出现的问题及解决方案
4.1 报错:Cannot find existing PyQt5 plugin directories
解决方法:
根据Paths checked后面的路径建立文件夹,把Anaconda下的qt文件夹里的plugins文件夹下的所有文件复制到新建的文件夹里,我的电脑上对应的位置是:D:\ProgramData\Anaconda3\pkgs\qt-5.6.2-vc9hc26998b_12\Library\plugins,再重新打包即可成功。
创建文件夹时,先进入C盘根目录,然后利用md qt64\qt_1544645195969\_h_env\Library\plugins的命令即可创建文件夹。
2.报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position
解决方法:
1、首先尝试将中文解释都去掉
2、然后,改变控制台的编码格式为utf-8 解决方法,先在控制台中输入 chcp 65001,
然后再使用pyinstaller 打包即可!
ImportError:No module named 'xxx'
这个问题出现的原因是,有些模块是隐藏导入的,但是pyinstaller打包时并未指定,所以执行时找不到此模块
二、问题解决:打包文件时,会生成一个spec文件;假如你主python文件叫做main.py,那么修改main.spec文件
我遇到的是No module named scipy._lib.messagestream
然后需要做的就是:
1、设置此模块隐藏导入
2、以此spec文件打包python(修改后记得保存)
打包后再执行exe文件,运行成功
或
D:\pythonWork\baiduai>pyinstaller -F machine1.py --hidden-import matplotlib.backends.backend_tkagg