如何彻底解决Pyinstaller打包后的程序识别不到静态文件

219次阅读
没有评论

共计 785 个字符,预计需要花费 2 分钟才能阅读完成。

背景

本站的 这篇博客、分享了一同时支持 Windows/Mac/Linux 的图片批量添加水印并压缩的工具,里面用到了 pyinstaller 技术来分别打包出来支持 3 个平台的程序,由于代码依赖一个静态字体文件,当时用了以下命令打包来进行的打包:

pyinstaller –onefile –nowindow –add-data=”arial.ttf:.” image_helper.py

意思是把 arial.ttf 这个静态字体文打包进当前目录,而代码里面调用的路径也是当前目录,可是在运行的时候却出现了如下报错:

OSError: cannot open resource

如何彻底解决 Pyinstaller 打包后的程序识别不到静态文件

我们打开报错的第 132 行看看,如下:

如何彻底解决 Pyinstaller 打包后的程序识别不到静态文件

碎碎念

用“pyinstaller OSError: cannot open resource”为关键字搜索不管是百度还是谷歌,搜出来的结果都是要你折腾系统字体,比如下面的这种:

如何彻底解决 Pyinstaller 打包后的程序识别不到静态文件

你是开发者你当然知道怎么折腾字体,但你把你打包好的程序交付给一个普通用户去使用,也要指望用户会这些骚操作么,当然不行呀。

解决方法

下面的方法只需改动两三行代码即可让打包好的程序在任意系统下均不依赖系统字体独立运行,彻底解决上面的报错。

[$]

其实很简单,把上面截图的第二张中的 131 和 132 行代码替换为下面的 3 行即可解决问题:

bundle_dir = getattr(sys, '_MEIPASS', os.path.abspath(os.path.dirname(__file__)))
path_to_ttf = os.path.abspath(os.path.join(bundle_dir, 'arial.ttf'))
ttfront = ImageFont.truetype(path_to_ttf, self.font_size)

注意前面要 import os 和 sys 这两个标准库哦~

至于应用到你自己的代码的时候,请举一反三哈~

[/$]

正文完
 
sharp097
版权声明:本站原创文章,由 sharp097 2020-09-20发表,共计785字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)