Windows下PyInstaller打包Python脚本后保存条码至Roaming文件夹遇OSError
打包exe后barcode库无法生成条码图片的解决方案
从报错栈可以定位问题:Pillow加载字体资源失败。开发环境能正常运行是因为系统可直接访问默认字体,但PyInstaller打包后,exe的运行沙箱环境无法自动定位字体文件,导致生成条码时无法渲染文本,最终无法保存图片。
以下是三种可行的解决方法:
方法1:打包本地字体文件(推荐)
- 从系统字体目录(如Windows的
C:\Windows\Fonts)复制一个字体文件(比如arial.ttf)到你的项目根目录。 - 修改代码,在生成条码时指定字体路径:
from barcode import get_barcode_class from barcode.writer import ImageWriter # 配置writer参数,指定项目内的字体文件路径 writer_options = { 'font_path': 'arial.ttf', 'font_size': 10, # 可选:调整字体大小 } hr = get_barcode_class('ean8') barcode = hr('00000000', writer=ImageWriter()) # 保存时传入配置参数 filename = barcode.save(PRUEBABARCODESAVEFILE, options=writer_options)
- 用auto-py-to-exe打包时,在Additional Files区域点击
Add Files,选择你复制的字体文件,确保字体和exe打包到同一目录。
方法2:修改PyInstaller spec文件
如果使用手动编写spec文件打包,在Analysis模块的datas中添加字体文件:
a = Analysis( ['你的脚本文件名.py'], datas=[('arial.ttf', '.')], # 将字体文件打包到exe所在的根目录 # 其他原有参数... )
执行pyinstaller 你的spec文件名.spec完成打包。
方法3:直接指定系统字体绝对路径
无需复制字体文件,直接在代码中写死系统字体的绝对路径:
writer_options = { 'font_path': 'C:\\Windows\\Fonts\\arial.ttf', }
注:此方法依赖目标系统存在对应字体,兼容性稍差。
验证步骤
修改代码后先在开发环境测试正常,再重新打包exe,运行后检查Roaming目录是否成功生成条码图片。
内容的提问来源于stack exchange,提问作者JosephMoraila
相关产品推荐
相关产品推荐

