欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python生成exe,pyinstaller编码错误或闪退,果断换坑cxfreeze!

程序员文章站 2024-02-03 22:12:58
...

pyinstaller的大坑

最近需要将一个python的Gui程序打包为exe

按照网上博客的建议——“py2exe很久没有更新,完全不能使用,应该换用pyinstaller”, 我安装pyinstaller后, "果不其然"又遇上了python的经典编码问题, "pyinstall UnicodeDecodeError: 'gbk' codec can't decode byte 0xa8 ...", 按照报错信息到了pyinstaller安装目录下面的winmanifest.py更改1075行为

with open(filename,'r', encoding='UTF-8') as f:

之后, 编码错误没有了, "顺利"生成了exe

然而, 问题远远没有解决, exe打开时里面出现中文乱码,并且闪退.

好的, 又按照博客的说法,把什么pyqt5复制到python文件目录下, 貌似对我这个问题没有用.

我坚持不懈, 我又把python文件复制到了pyqt5文件下, 还是不行

可能是我还调用了sys,math等库的原因,实在是太麻烦了,不知道究竟生成这个exe需要哪些包的哪些文件, 博客论坛里面还有人说复制dll的, 这么多, 太麻烦, 果断弃坑!

cxfreeze的新坑

cxfreeze虽然安装过程有些坑,但是生成exe的过程十分顺利, 我这里对于cxfreeze的安装过程做一下汇总

下载cxfreeze的whl文件

一种下载地址是sourceforge的, 最新版只有python 3.4,很久没有再更新了,我的环境是python 3.6, 这个不能派上用场

另外一种是在pypi上面,只有python 3.5,python 3.6和python 2.7的,跟上面的sourceforge配合起来刚刚好,根据你自己的python版本选择下载就行了, 我的环境是python 3.6 64位,所以选择cx_Freeze-5.1.1-cp36-cp36m-win_amd64.whl 

此外,好像还可以直接安装exe, 我没有尝试过,也没有保存这个的下载链接,有需要自己找吧, 我觉得下载whl就是一种比较稳妥的方法了

安装cxfreeze

命令行下cd到whl的下载目录,然后输入

python install cx_Freeze-5.1.1-cp36-cp36m-win_amd64.whl 

上面的whl文件名根据你自己下载的文件名进行更改

检测安装

cxfreeze的名称真是千变万化,有叫cx-freeze的,还有叫cx_freeze,或者cx_Freeze等等的, 不同的文件叫法还不一样,真是令人无语

在python交互式环境中应该输入

import cx_Freeze

如果没有报错就说明,文件安装无误,跟你的python环境是相匹配的

但是,问题还没有结束,我们生成exe的时候,是用的

cxfreeze xxxx.py --target-dir dist

需要cxfreeze命令

这个时候输入

cxfreeze -h

查看版本号

如果不出意外的话, 应该是会报错的,应该会显示"'cxfreeze' 不是内部或外部命令,也不是可运行的程序,或批处理文件。"的信息

解决报错

找到你的cxfreeze在Scripts中的安装位置,我这里是在D:\Anacoda3\Scripts中

python生成exe,pyinstaller编码错误或闪退,果断换坑cxfreeze!

在该目录下用记事本,notepad++或者sublime新建一个文本,输入

@echo off
D:\Anacoda3\python.exe D:\Anacoda3\Scripts\cxfreeze %*

语句具体作用,详见大神的说明,第二行中第一个是python环境对应的的python.exe目录,后面的就是刚才说的cxfreeze文件,路径要更改为你自己的

然后,将该文件命名为cxfreeze.bat,保存之后,再输入

cxfreeze -h

显示的如果是

python生成exe,pyinstaller编码错误或闪退,果断换坑cxfreeze!

就应该没问题了

生成exe

命令行中cd到你的python代码文件目录下,输入

cxfreeze xxxx.py --target-dir dist

(xxxx.py是你的python文件名)

等待一下,exe就应该生成成功了(在同文件目录中的dist里面)

cxfreeze会自己寻找python文件所使用的包和其他配置文件(比如图像,音频等),比较方便,我也没有出现编码的奇奇怪怪的错误