pyinstaller的安装与使用

1.参数设置

pyinstall使用

pyinstaller常见参数

  • -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 问题

解决 Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py 问题_Chris_zhangrx的博客-CSDN博客_cannot open 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'

pyinstaller打包报错for real_module_name, six_moduleAttributeError: 'str' object has no attribute 'items'_m0_37876745的博客-CSDN博客

pip install -U --pre setuptools就行了

bug7 RecursionError: maximum recursion depth exceeded in comparison

pyinstaller打包报错: RecursionError: maximum recursion depth exceeded,UnicodeDecodeError_sinat_32651363的博客-CSDN博客

bug8 Pyinstaller打包出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position

Pyinstaller打包出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 解决方案_Mr番茄蛋的博客-CSDN博客

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

參考

把字体放在同代码文件夹下边即可!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值