pyinstaller打包中遇到的问题汇总

学习python也有一段时间了,也算踩过不少坑,都是靠浏览器书签和杂乱的注释保存,最后痛下决心,决定整理一番。第一篇博客,将记录持续收集使用pyinstaller打包中遇到的问题。

pyinstaller基本命令

pyinstaller -F *.py

-F,-onefile 产生单个的可执行文件
-D,–onedir 产生一个目录(包含多个文件)作为可执行程序

坑1、直接打包,报错:python maximum recursion depth exceeded

处理办法分三步走:

1.命令行输入:pyi-makespec -F *.py,会生成一个bomcheck.spec文件,路径为C:\Windows\System32。(使用-D 参数时,文件在当前路径生成) 路径是命令行运行的目录。

2.找到bomcheck.spec这个文件,给它的第二行插入下面两行代码

import sys
sys.setrecursionlimit(50000)

3.命令行输入:pyinstaller -F bomcheck.spec

默认最大递归次数为1000,可为什么递归会超出1000?小朋友你是否有许多问号???

坑2、运行打包完成的exe时,报错:no module named 'pkg_resources.py2_warn’

同坑1、在文件中找到hiddenimports,填写’pkg_resources.py2_warn’参数,注意引号。
在这里插入图片描述

坑3、生成exe过大,长时间卡在Determining a mapping of distributions to packages…

据目测,pyinstaller会同时打包所有本机已经安装的库,导致打包过程极慢,文件极大,加载运行极慢。那我们换一个干净的环境不就好了?我想到了强大的anaconda。
具体步骤如下:
1、创建新环境,切换到新环境,按图勾选你需要的库,并应用。
在这里插入图片描述
在这里插入图片描述
2、激活新环境
我不太喜欢图形界面操作,改用命令行
conda activate your_env_name(虚拟环境名称)

3、测试打包
在新环境运行代码,测试是否报错。
正常的话就可以打包了。这次速度要快得多,文件也会小,执行也会快。

4、切换回原来的环境
conda activate root

坑4、报错:failed to execute script py_rth_pkgres

在需要打包的.py文件中添加以下代码,即可成功成功打包.exe

import six
import packaging
import packaging.version
import packaging.specifiers
import packaging.requirements

从坑4得到启示:pyinstaller -F打包.exe出错时,可以先使用 -D打包,通过命令行运行查看错误信息,通过google搜索答案

参考
[1]: http://c.biancheng.net/view/2690.html
[2]: https://www.cnblogs.com/huipengbo/p/9856361.html
[3]: https://blog.csdn.net/slc1112/article/details/104234076
[4]: https://blog.csdn.net/weixin_42997255/article/details/103515457
[5]: https://blog.csdn.net/wuminminmin/article/details/81166449

发布了2 篇原创文章 · 获赞 0 · 访问量 91
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览