笔者的错误如下:

1、pkg_resources.DistributionNotFound

在用pyinstaller打包(-D 选项)成功,执行打包后的exe报以下错误:
在这里插入图片描述
关键错误在最后一行:

pkg_resources.DistributionNotFound: The 'google-api-python-client' distribution was not found and is required by the application

解决问题的方法为: 自己写个hook,然后放进pyinstaller的hooks里面即可。
创建一个hook-ctypes.macholib.py文件:(针对该类问题文件名都一样
里面的内容如下:(google-api-python-client根据具体报错修改,其他内容一致)

from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('google-api-python-client') 

然后打包的时候,多加一句–additional-hooks-dir=., 笔者指令如下所示:

Pyinstaller -D -i icon.ico --hidden-import=keras --hidden-import=tensorflow --hidden-import=six Dislden_11.16.py --additional-hooks-dir=.

2、pyinstaller 打包出现第三方库FileNotFoundError

在用pyinstaller打包(-D 选项),如果用到的第三方库含有data文件,而pyinstaller又没有自带该第三方库文件的hook的时候,执行打包后的exe一般会报以下错误

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\1\\_MEI54762\\jieba\\dict.txt'
[20784] Failed to execute script bat_server

上面就是没把python库jieba的dict.txt打包进来,导致了错误。

那么,解决问题也很简单,自己写个hook,然后放进pyinstaller的hooks里面即可。

hook文件的命名规范为: hook-【库名】.py,以结巴分词为例,即为hook-jieba.py,然后简单敲入以下两行:

from PyInstaller.utils.hooks import collect_data_files

datas = collect_data_files("jieba")

接下来,找到pyinstaller的hooks文件夹:

笔者位于D:\Anaconda3\envs\tensorflow2\Lib\site-packages\PyInstaller\hooks下,然后把hook-jieba.py丢进去,如下图所示:
在这里插入图片描述

最后,回到项目根目录,用pyinstaller打包即可。(注意可能需要把build目录删了,使pyinstaller从头开始打包
当看到pyinstaller的日志里使用了我们自定义的hook后,就万事大吉了。
在这里插入图片描述
该错误的原文链接为:https://www.it610.com/article/1281803983375056896.htm

3、pyinstaller打包成.exe成功,但运行时:NameError

在这里插入图片描述
错误:

NameError: name 'defaultParams' is not defined

问题分析:
defaultParams 使用前未定义,考虑到该代码对程序并无影响,所有直接注释掉该行代码(563)如图所示:
找到文件所在路径,笔者路径如下:
在这里插入图片描述

在这里插入图片描述
重新执行打包命令,并在终端运行.exe

4 、UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 129: invalid continuation byte

在用pyinstaller打包(-D 选项)成功,执行打包后的exe报以下错误:

File "object_detection\utils\config_util.py", line 140, in get_configs_from_pipeline_file
proto_str = fid.read()
File "tensorflow\python\lib\io\file_io.py", line 116, in read
File "tensorflow\python\lib\io\file_io.py", line 79, in _preread_check
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 129: invalid continuation byte

**注意:
检查路径是否为相对路径,因为打包后软件放到其他电脑是无法找到原电脑中的绝对路径的文件的,因此所有的文件路径,一定要改为相对路径,并一起打包!!!!!
思路:编码格式问题(可直接解决问题)
1、首先尝试将中文解释都去掉
2、然后,改变控制台的编码格式为utf-8 解决方法,先在控制台中输入 chcp 65001
然后再使用, 命令打包即可!

Pyinstaller -D -i icon.ico --hidden-import=keras --hidden-import=tensorflow --hidden-import=six Dislden_11.16.py --additional-hooks-dir=.
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐