You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下PyInstaller打包Python脚本后保存条码至Roaming文件夹遇OSError

打包exe后barcode库无法生成条码图片的解决方案

从报错栈可以定位问题:Pillow加载字体资源失败。开发环境能正常运行是因为系统可直接访问默认字体,但PyInstaller打包后,exe的运行沙箱环境无法自动定位字体文件,导致生成条码时无法渲染文本,最终无法保存图片。

以下是三种可行的解决方法:

方法1:打包本地字体文件(推荐)

  1. 从系统字体目录(如Windows的C:\Windows\Fonts)复制一个字体文件(比如arial.ttf)到你的项目根目录。
  2. 修改代码,在生成条码时指定字体路径:
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)
  1. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:31:15