pyinstaller的安装与使用

python 专栏收录该内容
10 篇文章 0 订阅

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

參考

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

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

为了支持向后兼容以及可能的升级方案,JDBC Driver 2.0 在每个安装包中都包括 2 个 JAR 类库:sqljdbc.jar 和 sqljdbc4.jar。 sqljdbc.jar 类库提供对 JDBC 3.0 的支持。 sqljdbc.jar 类库要求使用 5.0 版的 Java 运行时环境 (JRE)。连接到数据库时,在 JRE 6.0 上使用 sqljdbc.jar 会引发异常。 注意: JDBC Driver 2.0 不支持 JRE 1.4。使用 JDBC Driver 2.0 时必须将 JRE 1.4 升级至 JRE 5.0 或更高版本。在某些情况下,您可能需要重新编译应用程序,因为它可能与 JDK 5.0 或更高版本不兼容。有关详细信息,请参阅 Sun Microsystems 网站上的文档。 sqljdbc4.jar 类库提供对 JDBC 4.0 的支持。它不仅包括 sqljdbc.jar 的所有功能,还包括新增的 JDBC 4.0 方法。 sqljdbc4.jar 类库要求使用 6.0 或更高版本的 Java 运行时环境 (JRE)。在 JRE 1.4 或 5.0 上使用 sqljdbc4.jar 会引发异常。 注意: 如果应用程序必须在 JRE 6.0 上运行,即使该应用程序不使用 JDBC 4.0 功能,也应使用 sqljdbc4.jar。 请注意,尽管驱动程序旨在与所有主要的 Sun 等效 Java 虚拟机一起工作并由这些虚拟机支持,但却是在 Sun JRE 5.0 或更高版本上进行测试的。 JDBC Driver 专为使用 SQL Server 2005 引入的功能而设计,但它也可以向后兼容 SQL Server 2000(包括 64 位版本)。 重要提示: Microsoft SQL Server JDBC Driver 2.0 可以连接到 SQL Server 2008,但不完全支持 SQL Server
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值