pyinstaller打包时总是出现这个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyinstaller打包时总是出现这个问题相关的知识,希望对你有一定的参考价值。

输入chcp 65001和将out = out.decode(encoding)改成out = out.decode(encoding, errors='ignore')都试过了,也不好使。

打包过程中遇到的问题:
首先升级你的pyinstaller升到最新版。

1、UnicodeDecodeError
这个问题是因为你的代码里应该是包含了中文字符,这个问题很好解决,只需在打包前输入:

chcp 65001
1
之后再重新打包即可。

2、RecursionError
写过python递归程序的同学应该知道,python为了防止无限递归这个问题,设置了最大递归深度,当然这也会妨碍其他程序的正常运行。因此我们只需打开生成的 xxx.spec 文件,加入:

import sys
sys.setrecursionlimit(10000) # 设置一个比较大的值即可
1
2
之后再执行:

pyinstaller xxx.spec
1
成功生成exe之后遇到的问题
此时,生成的exe文件往往会闪退,我们难以看到报错信息,有个小技巧就是把你的exe程序拖到你的cmd窗口运行,此时就可以查看具体的错误信息。如果少文件,就用pip安装即可,以下问题针对已经安装好所有的模块仍报错的情况。

1、ModuleNotFindError
打开你的文件夹里生成的 xxx.spec文件,在hiddenimports行加入缺少的模块。例如:

hiddenimports=['xxx']
1
xxx为你提示缺少的模块,之后执行:

pyinstaller xxx.spec
1
2、DistributionNotFound
这个问题主要是缺少对应的hook文件导致的,找到你pyinstaller的安装目录,进入hooks文件夹,创建类似于hook-xxx.py文件xxx为你的报错缺少的模块,打开加入一下代码:

from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('xxx')
1
2
然后重新执行:

pyinstaller -D xxx.py
1
3、 缺少dll的问题
直接在的python或者anaconda环境里搜索你缺少的dll文件名字,直接拖到你的exe文件夹下即可。

4、 ImportError: unable to find Qt5Core.dll on PATH
参考技术A

更新系统

这个是由于版本过低,或者是系统异常导致的,需要更新系统

重启手机

手机出现故障了,需要检查后并重启手机。

记录Pyinstaller 打包的坑

pyinstaller运行时出问题 记录解决

本文记录了解决pyinstaller打包含有numpy、pandas的代码出现的运行时错误问题

背景

在使用pyinstaller打包包含numpypandas包时出现了一些错误。打包过程报了一些警告,缺少pymysql 等几个包,但是最后也是打包成功了。但是到运行时则会出现缺少numpy依赖的问题。

解决流程

  1. 尝试网上方法

    1. 降低numpy版本,从1.22 —>1.15
      结果报错,不让我安装
    2. 改写spec文件,在hiddenimports处添加numpy和pandas
      结果无用
    3. 在执行打包命令时,显示的使用-hidden-import引入两个包
      还是无用
    4. 换至开发环境下进行打包,怕base环境缺少某些需要的包
      依旧无用
  2. 正解

    github找了、google找了、百度找了、论坛找了;都没用。最后只能求助于官网。

    看到官网有这么一句话:Python packages conditionally import some other packages. So to achieve slim apps it is recommended create a virtualenvz with only dependencies required by your app.

    虽然这句话是为了让打包后的结果更小吧,但是回想到最初打包中报的缺少pymysql 这些包的警告,我准备尝试一些,创建一个新的环境,全部用conda 安装numpy、pandas、redis、redis-py、pyinstaller,只使用-F 参数。

    成了!

结论

由于只是打包一个小文件给redis一个客户端使用,所以并没有去认真学习pyinstaller的各种东西,暂时也没这个必要。

重新创建一个新的之包含所需包的环境还是很有必要的!

以上是关于pyinstaller打包时总是出现这个问题的主要内容,如果未能解决你的问题,请参考以下文章

带有 Pyinstaller 的 PySide2:无法执行脚本 pyi_rth_pkgres

Pyinstaller“无法执行脚本pyi_rth_pkgres”和缺少包

ImportError: No module named 'xlsxwriter' - 当我使用 Pyinstaller 打包程序时

在EXE中使用PyInstaller打包数据文件

pyinstaller 打包配置文件

pyinstaller打包程序 带图片