详解pyinstaller生成exe的闪退问题解决方案

简单模块问题

如果在 pyinstaller project.py 的过程中,出现:

No module named 'xxx'

那就 pip install xxx 就行,比如:

$ pip install wxPython pypiwin32 tornado

这个 pip 对应于项目的虚拟环境。
其中 wxPython 对应 No module named 'wx'
其中 pypiwin32 对应 No module named 'win32com'
还有个老生常谈的小问题,提一下,避免萌新看的一头雾水,比如有些包有别名,比如你并不能通过 pip install wx 来解决 No module named 'wx' 的问题。这需要一些经验,没经验的这些去搜索引擎搜索搜索就知道了,基本解决方法都是 pip install ...,其中 ... 是这个模块的真名。

全网唯一答案系列

以上都是简单的问题,如果不会出现 No module named xxx 的问题,就不用关心 pip install 了。
再遇到闪退等问题可以加上命令参数 -D
pyinstaller -D project.py,表示我们打包成一个文件夹,而不仅仅是个 exe 文件,当然这个项目文件夹在 dist 下面。

在每次重新打包之前,务必删除项目中的 builddist 目录。

这时候还会碰到一些棘手的问题,比如:

可能看的会有点晕,这里需要耐心点看,为了避免文字过多产生的表达歧义,再强调一下思路:「把生成的项目文件夹中缺失的依赖文件,如 dll 文件;从开发环境中的包里找到它,并复制进来。」

打包调试的时候需要注意不要隐藏控制台,不然拿不到错误信息,无法进行下一步 debug 操作。

我们可以看到这个问题被解决了,但是会有新的问题,基本都是 sklearn 的问题,这里只是枚举我发生的问题,如果你写的是别的项目,库依赖也很严重,也会有这些问题,可能不是 sklearn,总之肯定是某个包缺失依赖文件或模块文件的问题。

现在来看看新的报错信息:

如果你用这个方法解决不了,那就尝试把缺失的模块从开发环境中的 site-packages 里复制出来粘贴进我们生成的 ./dist/project/ 里面对应的模块所在位置(如果没有找到对应的路径,不存在这个文件夹之类的,就如以上说的建一个 .libs/ 文件夹一样创建一个。)
比如我的生成项目文件夹位于:
C:\Users\Galois\Documents\project\dist\project

接下来的操作基本就是对这个目录里面进行粘贴缺失的模块,根据异常报错信息,比如我们刚才得到的报错是:

ModuleNotFoundError: No module named 'sklearn.utils._cython_blas'

现在我们进入两个地方:
生成的项目中的目录:
C:\Users\Galois\Documents\project\dist\project\sklearn\utils
开发环境中的目录(由于我不知道各位开发环境怎样,这里就直接用开发环境的相对目录来说明路径):
yourenv/Lib/site-packages/skearn/utils/

在这个开发环境中的这个路径我们会看到一些 pyd 文件,我们的操作诸如这张图:

同样的方法,解决这个同样类型的错误,思路「打开开发环境对应的目录找到生成项目目录中缺失的 pyd 文件复制进生成项目目录中对应的位置」。

可能有人一遍有点懵,那我就不省略了,再重复下修复这个错误的示意图:

这就成功了。

到此这篇关于详解pyinstaller生成exe的闪退问题解决方案的文章就介绍到这了,更多相关pyinstaller生成exe内容请搜索来客网以前的文章或继续浏览下面的相关文章希望大家以后多多支持来客网!