Python实现圣诞树、打包exe过程和遇到的问题

Python实现圣诞树、打包exe过程和遇到的问题

昨天看到CSDN推荐的Python生成圣诞树的博客,想着圣诞节也没给女朋友送过什么礼物,决定这个python脚本改成可执行文件然后作为她今年的礼物(偷懒)。本以为是个很轻松的过程,但是python转exe的过程发生了很多问题,主要是由WordCloud这个包导致的。在此记录一下解决过程。

参考博客

  1. 圣诞节到了,写一个炫酷的圣诞树和平安果,送给你最爱的人吧
  2. 如何将python文件打包成exe格式
  3. Python程序打包成.exe(史上最全面讲解)
  4. pyinstaller、jieba、wordcloud打包exe过程中遇到的问题总结一下
  5. 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了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倘若我问心无愧呢丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值