• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 21次浏览 已收录 0个评论

简单模块问题

如果在 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 目录。

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

看最后的异常提示是 PyInstallerImportError 错误,可以看到 sklearn 下面缺少 .libs/vcomp140.dll 文件,这是因为 pyinstaller 的执行过程中,没有把虚拟环境(你的项目开发环境中 Lib/site-packages/ 内的包)中的该依赖文件(vcomp140.dll)打包进来,这时候去原本我们的虚

本文来源gaodai.ma#com搞#代!码(网

拟环境中找到这个文件,复制出来,粘贴进我们这个打包生成的文件夹内对印的 ./sklearn 目录下的对应位置,但是我们看到这个目录下面居然没有 .libs 文件夹,那就在这里(./sklearn)创建一个,然后把那个缺的依赖文件(vcomp140.dll)复制进来就行。
可能看的会有点晕,这里需要耐心点看,为了避免文字过多产生的表达歧义,再强调一下思路:「把生成的项目文件夹中缺失的依赖文件,如 dll 文件;从开发环境中的包里找到它,并复制进来。」

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

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

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

这个问题基本全网的答案都是诸如修改 project.spec 文件中的 a=Analysis(...) 选项的 hiddenimports 配置:

hiddenimports=['cython', 'sklearn', 'sklearn.utils._cython_blas'],

然后删除 builddist 后执行:

$ pyinstaller -D project.spec

或者是直接给 pyinstaller 命令加参数,比如这样:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解pyinstaller生成exe的闪退问题解决方案

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址