利用pyinstaller 打包 barcode 出现 can not open resource 的解决办法

在上篇文章末尾中将barcode打包为.exe后,运行软件会报错:can not open resource

出现这个问题的原因是barcode找不到默认字体,barcode的默认字体在安装目录下

image-20220120113508534

解决方案为:将字体文件复制出来,然后重新指定路径

writer = ImageWriter()
writer.font_path = 'data/DejaVuSansMono.ttf' #将字体文件放在与代码同目录下的data文件中
ean = barcode.get('code128', 'content', writer=writer)
ean.save(path, options)

关于解决方案的分析

为什么要分析这个bug嘞,因为我在网上搜的时候,网上的方案行不通,我就只能自己分析了。网上有两种方案,第一种将默认字体文件移动到 C:/Windows/Fonts下,我尝试之后不可行,我怀疑的原因是:将默认字体文件移动进来后名字改变了,如下图所示多加了几个空格,导致识别不到。

image-20220120114509429

第二种也是将默认的字体文件移动到软件目录下,但是操作代码不对,应该是我和他barcode版本不一样导致的,于是乎我就必须自己找解决方案了。

首先,我先尝试修改C:/Windows/Fonts下的字体文件名字,修改失败了。于是就只能读barcode源码,看看能不能找到蛛丝马迹,索性不难找,接下来把方法总结总结。

首先看源码文件,知道了我的版本是0.13.1

image-20220120115053152

既然是字体出问题了,那就肯定和字体文件名字挂钩,于是我就在所有文件里面搜索DejaVuSansMono,然后就在writer.py中发现了相关代码,顺带发现了参数font_path

image-20220120115355210

按图索骥,分析font_path是属于BaseWriter,而在制作条形码的代码中的ImageWriter是继承BaseWriter的子类,这样修改就很简单了,直接实例ImageWriter(),然后修改参数font_path就行!

writer = ImageWriter()
writer.font_path = 'data/DejaVuSansMono.ttf' #将字体文件放在与代码同目录下的data文件中
ean = barcode.get('code128', 'content', writer=writer)
ean.save(path, options)
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值