pyinstaller 打包问题汇总以及解决办法

pyinstaller 使用很简单,大家无非就是用两种打包方式。

pyinstaller -D xxx.py

将项目打包成一个文件,或者

pyinstaller -F xxx.py

将项目打包成一整个exe文件,只有一个exe文件。

注意:xxx.py是你项目的主程序

我使用的是第一种方式,在此介绍可能遇到的问题

打包过程中遇到的问题:

首先升级你的pyinstaller升到最新版。

1、UnicodeDecodeError

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

chcp 65001

之后再重新打包即可。

2、RecursionError

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

import sys
sys.setrecursionlimit(10000)  # 设置一个比较大的值即可

之后再执行:

pyinstaller xxx.spec

成功生成exe之后遇到的问题

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

1、ModuleNotFindError

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

hiddenimports=['xxx']

xxx为你提示缺少的模块,之后执行:

pyinstaller xxx.spec

2、DistributionNotFound

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

from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('xxx')

然后重新执行:

pyinstaller -D xxx.py

3、 缺少dll的问题

直接在的python或者anaconda环境里搜索你缺少的dll文件名字,直接拖到你的exe文件夹下即可。

4、 ImportError: unable to find Qt5Core.dll on PATH

pyqt5自身的bug, 解决办法:

if hasattr(sys, 'frozen'):
    os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
import PyQt5

以上,如果对你有用记得点赞。

你可能感兴趣的:(pyinstaller,打包)