Python实现圣诞树、打包exe过程和遇到的问题
昨天看到CSDN推荐的Python生成圣诞树的博客,想着圣诞节也没给女朋友送过什么礼物,决定这个python脚本改成可执行文件然后作为她今年的礼物(偷懒)。本以为是个很轻松的过程,但是python转exe的过程发生了很多问题,主要是由WordCloud这个包导致的。在此记录一下解决过程。
参考博客
- 圣诞节到了,写一个炫酷的圣诞树和平安果,送给你最爱的人吧
- 如何将python文件打包成exe格式
- Python程序打包成.exe(史上最全面讲解)
- pyinstaller、jieba、wordcloud打包exe过程中遇到的问题总结一下
- OSError: cannot open resource 错误原因及解决方法
圣诞树Python文件
首先是Python程序和WordCloud库的安装,步骤较为简单,根据大佬的博客 圣诞节到了,写一个炫酷的圣诞树和平安果,送给你最爱的人吧即可完成,产生的效果如下图所示。这里就直接扒了大佬博客中的图片过来了,就不自己再生成一张了。
根据对象的不同可以更改christmas.txt文件中的内容,改变生成词云圣诞树的内容,这里推荐是狗屁不通文章生成器+谷歌翻译,直接给她整个花里胡哨的。想要啥词大一点就多复制几遍就完了。
Python To Exe
需要安装pyinstaller包,进入目标路径后运行
pyinstaller -F ChristmasTree.py
输出可以得到这样几个文件
进入dist文件夹可以得到可执行文件(PS:其他的文件是我自己后面放进去的,上面的命令只会在该文件夹生成一个可执行文件)
Error
运行exe文件时出现的第一个问题就是no such file or dicrectory:‘C:\…\_MEI17545602\wordcloud\stopwords’
根据Traceback显示问题出在wordcloud\wordcloud.py文件第三十五行的位置,如下图所示。
这里的问题绝对路径和相对路径,在绝对路径中这个文件是并不存在的(报错的哪一行),而且每次运行时_MEI17xxxxx这个文件夹名称都会发生改变,在此我们根据pyinstaller、jieba、wordcloud打包exe过程中遇到的问题总结一下的修改方案将其修改为
FONT_PATH = os.environ.get('FONT_PATH', os.path.join(os.path.dirname(sys.executable), 'DroidSansMono.ttf'))
STOPWORDS = set([x.strip() for x in open(os.path.join(os.path.dirname(sys.executable),'stopwords')).read().split("\n")])
请注意在打包完之后将这里恢复,否则py存在问题
然后按照上面的步骤打包程序,再搜索将stopwords文件放到exe文件所在目录下。
再次运行exe文件,出现了另一个OSerror:cannot open resource。
我查询了许多博客显示的都是font_path存在的问题,但是本文代码中根本没有采用font_path,我根据OSError: cannot open resource 错误原因及解决方法修改了py文件,添加了font_path并且将字体文件复制到当前目录下,如上图中的STIXGeneral.ttf。再次打包文件运行exe,此时就可以运行了。不过还是需要吐槽一句文件300多MB,也就画了一个图。
后记
十分感谢参考博客各位大佬的文章,如有错误,肯请海涵。另外写此文时发现第二个问题,即OSerror存在问题的原因应该是由于修改第一个问题时也改动了font_path路径导致的,并且默认采用的是DroidSansMono.ttf。那么此时解决第二问题的另一方法是直接找到DroidSansMono.ttf文件复制到目标路径下即可,无需修改Py文件代码添加font_path了。