1.参数设置
-
-F 表示生成单个可执行文件
-
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-
-i <图标地址>表示可执行文件的图标
生成无调试窗口、隐藏扩展文件、指定图标单个exe文件:
pyinstaller --hidden-import=pkg_resources -F -w -i icons\mine.ico main.py
注意-i 后面除了程序入口main.py就不要添加其它参数了。图标必须是.ico文件,在转换图片为ico网站。
Bugs
bug1 错误:解决 Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py 问题
bug2 错误:pyinstaller报错ModuleNotFoundError: No module named 'setuptools._vendor'
错题集(已解决):pyinstaller报错ModuleNotFoundError: No module named ‘setuptools._vendor‘_泛纪元的啊有猫-CSDN博客
bug3 错误:No module named 'keras'
直接:pip install keras
bug4 当你打包成exe文件时会出现一些错误,比如多文件打包
你可以参考一下这个网址:
bug5 当你去打开打包生成的exe文件时,报错:
failed to execute scipt main
参考下面这个网址的方法,文件打包后只生成一个exe文件和你需要的外设文件。
pyinstaller打包运行报错failed to execute script main_一亩三分地-CSDN博客
就是这个命令,使文件只有一个exe文件:pyinstaller --hidden-import=queue -w -F main.py
但是这个命令有一点不好,如果一台新的机器缺少一些文件,可能需要通过网络下载某些文件,而这个命令里的-w参数会不显示你的命令行窗口,可能会导致无法下载,我在有的机器上可以下载有的不可以,所以为了保证程序的健壮性,还是去掉这个-w参数,显示那个很丑的cmd窗口。下面这两个都可以用:
pyinstaller --hidden-import=queue -F main.py
pyinstaller --hidden-import=pkg_resources -F main.py
bug6 pyinstaller打包报错for real_module_name, six_moduleAttributeError: 'str' object has no attribute 'items'
pip install -U --pre setuptools就行了
bug7 RecursionError: maximum recursion depth exceeded in comparison
bug8 Pyinstaller打包出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position
bug 9 except win32api.error as W32E:
AttributeError: module 'win32ctypes.pywin32.win32api' has no attribute 'error'
把图标图片改为ico格式:pyinstaller --hidden-import=pkg_resources -F -w -i icons\xxx.ico main.py
bug 10 pyinstaller设置图标出现“struct.error: unpack requires a buffer of 16 bytes”
解决方法:使用在线转换ico工具来转换图片就可以了,需要转换成尺寸为16*16的
这里有一个在线转换成ico的工具:PNG转ICO - 在线转换图标文件
bug11:ImportError: No module named '_pywrap_tensorflow_internal'
description:
用win7电脑运行exe时,报错:
File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\imp.py", line 297, in find_module
raise ImportError(_ERR_MSG.format(name), name=name)
ImportError: No module named '_pywrap_tensorflow_internal'
我打包的这个版本的编译环境:
CUDA 9.0 cudnn7.6.0 python=3.6.7 tensorflow-gpu==1.12.0
solution:
换tensorfow-cpu的更低版本1.5.1
bug12:rnn\python\ops_gru_ops.dll not found
description:
打包环境python=3.5.5 tensorflow==1.5.0 keras==2.0.6 (太高版本keras会与低版本tensorflow不兼容),pyinstall打包后,运行exe报错:
tensorflow.python.framework.errors_impl.NotFoundError: tensorflow\contrib\util\tensorflow\contrib\rnn\python\ops\_gru_ops.dll not found
[21216] Failed to execute script mainUI
它说找不到
tensorflow\contrib\util\tensorflow\contrib\rnn\python\ops\_gru_ops.dll
这个目录下的这个dll文件。
solution:
确实我打包的dist目录下没有这个目录,但是我的_gru_ops.dll在
tensorflow\contrib\rnn\python\ops\_gru_ops.dll
这里。于是我创建了报错里缺失的目录,并把该文件复制粘贴进去。为防止继续报此类错误,我把tensorflow\contrib\下的所有的文件夹都剪贴进tensorflow\contrib\util\tensorflow\contrib\里去了,可能代码有问题,才多了tensorflow\contrib\这个冗余目录前缀。
bug13:Could not import PIL.Image
description:
打包的命令:
pyinstaller -w -i icons\bone_joints.ico mainUI.py
运行打包的exe程序来诊断时,没有PIL这个模块,看看打包的文件堆里面,确实没有把这个模块打包进去。果然靠解决bug2的奇淫技巧还是不行。
File "keras\preprocessing\image.py", line 320, in load_img ImportError: Could not import PIL.Image. The use of `array_to_img` requires PIL.
然后我想了想,我还没试过用当前的tensorflow1.2好好地运行检测过所有功能,果然,这个环境本身就缺PIL这个包,于是:
pip install pillow
成功!
bug13:OSError: cannot open resource File "F:Python36\lib\site-packages\PIL\ImageFont.py", self.font
把字体放在同代码文件夹下边即可!