当前位置: 代码迷 >> 综合 >> Pyinstaller 打包python脚本为可执行程序
  详细解决方案

Pyinstaller 打包python脚本为可执行程序

热度:89   发布时间:2023-10-01 02:52:14.0

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

Pyinstaller 打包python脚本为可执行程序

解决方法:

根据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、设置此模块隐藏导入

Pyinstaller 打包python脚本为可执行程序

2、以此spec文件打包python(修改后记得保存)

Pyinstaller 打包python脚本为可执行程序

打包后再执行exe文件,运行成功

D:\pythonWork\baiduai>pyinstaller -F machine1.py --hidden-import matplotlib.backends.backend_tkagg