一、背景介绍
公司使用的python环境是Anconda+Python3.6,64位系统。
有一个py程序主要是图像批量处理相关的,涉及到文件遍历、字符串拼接,于是“自然而然地”在用pyinstaller打包的时候遇到了这个经典报错信息:
AttributeError: 'str' object has no attribute 'items'
二、攻克
1.百度查了很多资料无果,在同事的帮助下“科学上网”,很快就精确地找到了一些高人的回复,在试了很多方案之后,终于找到了【对症的药】。
2.首先,因为问题都是出在pyinstaller上,网上有很多人遇到pyinstaller装错32位或64位版本的,在这里提供一个最简单的方法,写一个hello world的py程序,如果这个能成功打包exe文件并成功运行,说明和pyinstaller无关,你的环境是对的,只是缺少“一些”第三方依赖文件。
3.通过查阅stackoverflow上的类似的回答可以得知——报错虽然是在最后一行,但是向上滚动日志,可以发现一句话,意思差不多是缺少某个模块(Moudle),我照着回答者的方式往自己的DOS输出日志上看,找到了:
No moudle named “setuptools._vender”
因为这句报错是在前面,所以它才是导致最终打包失败的原因。当然,这只是针对我的电脑的情况,大家可以根据自己出现的报错去装对应的文件。
网上说的用pip install setuptools的方法对我无效,我找到的是这位高手的解答。很对症,因为我也是anconda,但是安装完之后还是报错,这就是第二个坑,我灵机一动,会不会是版本不匹配?因为pyinstaller是最新版本的,那么装的setuptools不应该与anaconda匹配,而是要更新到最新版,与pyinstaller的版本去匹配,于是我输入了下面的指令:
pip install -U setuptools
4.更新完之后,果然这个报错消失了,然而,打包进程又中断了,这次报错是在PyQt5.行了!很熟了,来吧:
pip install PyQt5
抱着试试的心态,果然成了!
Ps. 今天需要在新服务器上部署环境,进行到最后一步,安装PyQt5时,显示某个文件授权失败(Permission denied),无法访问;于是将原先的.pyt文件全部删除,重新安装,就可以了!~
三、感想
这次的打包真是一波三折,要是在以前早就晕了,但现在因为多了很多信心,始终抱着一个心态,“这件事肯定能做成,只是费点事”,于是就这么解决了。我要感谢我的BOSS教会了我这些!
特意写下来解决过程,希望能帮助到同样遇到类似问题的工程师们!
网友评论