海龟编辑器python版本与wordcloud库版本不兼容问题的解决

项目场景:

本人是个教育园丁,为了教授粤教版信息技术必修一第五章5.4小节“数据的可视化表达”内容,我以词云为切入点,引导学生借助python制作词云来体验数据的可视化。我选用wordcloud库和海龟编辑器来实现,但是运行wordcloud时出现了“ValueError: Only supported for TrueType fonts”的错误。


问题描述

海龟编辑器中利用“库管理”安装wordcloud后,运行出现“ValueError: Only supported for TrueType fonts”的错误(如下图)。
出现的TrueType fonts错误
报错信息翻译:wordcloud只支持TrueType格式的字体。

我参考网上其他博主做法:修改指定wordcloud的字体路径(字体是本地电脑C:\Windows\Fonts文件中的简体汉字),但还是无法解决问题。直到我看到wu_huashan的一篇文章——《python3.6 无法使用wordcloud 1.9版本的问题》,我才意识到,有可能python当前版本与wordcloud版本不兼容。

原因分析

于是我在海龟编辑器中输入以下代码,查询海龟编辑器的python版本:

#Python代码查询python版本
import sys
print(sys.version)

海龟编辑器python解释器版本
可知:海龟编辑器默认的Python编辑器版本是3.6.5。

然后我又查了一下海龟编辑器安装的wordcloud版本:

#Python代码查询安装的wordcloud版本
import wordcloud
print(wordcloud.__version__)

海龟编辑器安装的wordcloud版本
可知:海龟编辑器安装的wordcloud版本是1.9.2。
正是wu_huashan文章里提到的python3.6无法使用wordcloud1.9的情况,所以问题变成了python版本与wordcloud版本不兼容的问题


解决方案:

(一)修改源代码
(二)降低wordcloud版本

方法一:修改wordcloud的源代码

参考了wu_huashan修改wordcloud源代码的方法。首先要找到wordlcloud源代码文件:

#查询wordcloud库所在位置
import pkg_resources
package_location = pkg_resources.get_distribution('wordcloud').location
print(package_location)

在这里插入图片描述
按照文件路径找到wordcloud文件夹,打开wordcloud.py文件(注意不是打开__init__.py),找到以下两行代码(位置在第508和510附近):

508:box_size = draw.textbox((0, 0), word, font=transposed_font, anchor=“lt”)
510:result = occupancy.sample_position(box_size[3] + self.margin,box_size[2] + self.margin,random_state)

修改为:

508: box_size = draw.textsize(word, font=transposed_font)
510: result = occupancy.sample_position(box_size[1] + self.margin,box_size[0] + self.margin,random_state)

在这里插入图片描述
再去运行wordcloud库:

在这里插入图片描述
成功解决问题(其中汉字显示出现问题,将在后文解决)。

方法二:降低wordcloud版本

考虑到要修改源代码容易出错,一点错误都会引起整个库的崩溃,因此我选择用降低wordcloud版本方法来解决版本不兼容问题,这也比较符合大多数人操作。本人曾经在一篇文章《海龟编辑器中requests依赖版本不兼容问题的解决》中阐述过海龟编辑器降低库版本的方法,大伙可以去参考。详细步骤如下:

(1)海龟编辑器“库管理”卸载wordcloud;

(2)找到海龟编辑器的python解释器路径:

#查询当前python解释器所在位置
import sys
print(sys.executable)

在这里插入图片描述

(3)win+R打开“运行”,输入CMD回车,进入命令行界面,用cd命令去到海龟编辑器python解释器的上层目录:

在这里插入图片描述
(4)输入以下pip命令,安装wordcloud1.8.1版本:

python -m pip install wordcloud==1.8.1

在这里插入图片描述
出现了Successfully字眼,说明安装成功,然后再测试一下,可以正常使用:

在这里插入图片描述
我特意打开wordcloud1.8.1版本的源代码,找到501和503行,发现和wu_huasha修改后的第508及510行代码一模一样,可见两种解决方法的本质都是一样的,但第二种方法可能会适合更多数新人的使用。

在这里插入图片描述

中文汉字显示问题的解决:

上面两种方法都解决了wordcloud调用问题,但是形成词云后中文汉字显示不出来。这是因为wordcloud默认使用的字体无法支持中文。普遍的做法是在代码生成WordCloud类时,直接用font_path关键参数指定TrueType类型字体,例如(代码第3行):

from wordcloud import WordCloud
text = "很亲肤。码数很合适。版型跟页面看着一样。"
wordcloud = WordCloud(font_path="msyh.ttc").generate(text)
image = wordcloud.to_image()
image.show()

考虑到学生是第一次体验词云(中文),教学过程应使用简单代码实现效果,不宜增加额外的操作和学习负担(例如下载字体并利用font_path关键参数指定字体)。所以我打算把简体汉字设置为wordcloud的默认字体,学生操作时无需再去指定字体的使用,减少学习负担。设置方法很简单:

(1)打开wordcloud的源代码,利用搜索功能找到FONT_PATH这个变量(一般在第34行)

在这里插入图片描述

(2)将34行代码里最后的字体文件名DroidSansMono.ttf改为msyh.ttc
msyh.ttc是简体汉字,大伙也可改为其他字体,但需要字体类型是TrueType,而且将字体放在C:\Windows\Fonts内。
在这里插入图片描述

再运行测试,就能正常显示词云。

在这里插入图片描述

总结

本文提供了两种方法解决海龟编辑器和wordcloud版本不兼容的问题:第一种方法虽然需要修改源代码,但是修改后可以让wordcloud1.9版本适配python3.6及以上的版本;第二种方法比较保险,但只能使用wordcloud1.8及其以下版本,各有利弊。延伸地来说,海龟编辑器里安装的库无法用上,很多时候是由于库版本与python解释器版本不兼容,或者是库的依赖版本不兼容,大伙都可以选择通过降低版本来解决问题。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值