Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法

python打包成exe文件首先需要安装pyinstaller库,再进入到目标文件目录,输入命令行打包py文件,但出现报错:TypeError: an integer is required (got type bytes) 。我的是python3.9,下面是出现问题到解决问题的过程:

目录

1. 安装pyinstaller库

2. 打包py文件

2.1 pyinstaller命令参数

2.2 将py打包成exe文件 

3. 查找报错原因

3.1 替换安装pyinstaller

3.2 详看报错内容

3.3 注意exe图标应为.ico格式

4. 最终效果


1. 安装pyinstaller库

打开Win+R,输入cmd即可进入到终端Terminal。终端输入命令 pip install pyinstaller 安装库,安装后pip list 显示 PyInstallers 3.3.1版本。

pip install pyinstaller

2. 打包py文件


2.1 pyinstaller命令参数

首先需要了解pyinstaller命令的参数,如:

pyinstaller -F -w -i demo.ico test.py
pyinstaller的参数(常用部分)
参数 含义 详细说明
-i 图标路径 需要图片为ico格式,可以把png等图片用在线格式转换工具转换成ico图片
-F 打包单个exe文件 通过代码只有一个py文件,如果有多个py文件不要选这个参数
-D 打包多个文件 创建一个目录,dist里面包含exe以及很多依赖文件,适合框架形式编写的代码
-w 禁止命令行窗口 启动exe程序时,不会弹出命令行窗口(仅对windows有效)
-c 使用控制台 使用控制台子系统运行(仅对windows有效)
-h 查看帮助

意思是对test.py文件打包成单个exe文件,并以根目录图片demo.ico生成exe图标,运行exe文件时禁止命令行弹窗。

2.2 将py打包成exe文件 

然后进入到目标文件目录(我的是 E:\test\tree.py),执行打包命令 pyinstaller -F xx.py

e:  #切换目录到E盘
cd test #进入目标文件夹
pyinstaller -F tree.py   #对目标文件tree.py进行单个exe文件打包

但出现了报错:TypeError: an integer is required (got type bytes),打包失败。打包成功的标志是尾行显示 completed successfully , 同时在tree.py根目录下生成一些文件,其中dist文件夹下有exe文件,可以在任意地方(比如其他电脑)单独运行。

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第1张图片

3. 查找报错原因

3.1 替换安装pyinstaller

虽然安装 pyinstaller 成功了,但安装过程还是有一些爆红的,便用其他方法替换安装pyinstaller,执行命令:

 pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz

但没想到也出现报错:SyntaxError:Command errored out with exit status 1:

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第2张图片

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第3张图片

3.2 详看报错内容

仔细查看中间一段报错提示:

SyntaxError:(unicode error)'utf-8' codec can't decode byte 0xbe in position 0: invalid start byte
Error:Building wheels requires the 'wheel' package. Please 'pip install wheel' then try again

第一行SyntaxError 说的是编码错误,无法解码utf-8格式,网上查了一些资料表示可能默认的是GBK编码,需要下载原始文件修改源码,增加encoding='utf-8',比较麻烦;

第二行Error 说的是缺少wheel模块,可以安装wheel再尝试。决定选这种方法执行:

pip install wheel

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第4张图片

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第5张图片

安装wheel模块的时候可以看到,系统自动卸载了已安装的PyInstaller 3.3.1版本,通过pip list 查看替换成了5.0.dev0 版本。

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第6张图片

3.3 注意exe图标应为.ico格式

现在可以尝试打包py文件了,由于打算给exe文件自定义图标logo,我从阿里巴巴矢量图标库下载了一个图标的png格式文件,直接改后缀为.ico文件,执行命令:

pyinstaller -F -i tree.ico tree.py

但再次出现报错:struct.error: unpack requires a buffer of 16 bytes

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第7张图片

查询得知原来是png格式的图标必须转换为.ico格式,不能强行改后缀,于是通过图片格式在线转换工具将图标转换成.ico格式。再次运行命令:pyinstaller -F -w -i tree.ico tree.py ,成功了!

pyinstaller -F -w -i tree.ico tree.py 

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第8张图片

4. 最终效果

tree.py开始的目录:

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第9张图片

打包exe文件后的目录,自动生成了很多文件:

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第10张图片

exe文件就在dist文件夹里面:

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第11张图片

双击运行tree.exe,看看效果:

Python 使用pyinstaller打包exe文件报错: TypeError: an integer is required (got type bytes) 的解决方法_第12张图片

尝试用其他电脑运行tree.exe,一切正常。太棒了!

你可能感兴趣的:(Python,python)