Pillow+Code128生成条码转exe后触发OSError:无法打开资源
PyInstaller打包后生成Code128条码报OSError: cannot open resource的解决方法
问题背景
我用Python开发了生成Code128条码并合成图片的程序,VS Code直接运行正常,但用PyInstaller打包成.exe后,执行到barcode_origin.save()时触发OSError: cannot open resource。尝试过加载默认字体、用--add-data打包ARIAL.ttf、简化测试代码,问题依然存在。
核心原因
报错根源是python-barcode库的ImageWriter在生成条码文本时,默认使用的字体路径在打包后的exe环境中无法访问——这和你自己代码里加载的large_font无关,是条码库内部的字体加载逻辑出了问题。
解决方案
步骤1:修改代码,适配打包后的字体路径
添加路径适配函数,给ImageWriter显式指定打包后可访问的字体文件,同时兼容PyInstaller的临时目录(onefile模式下,exe运行时会把资源解压到sys._MEIPASS目录)。
修改核心代码中的条码生成逻辑:
import sys import os from barcode.writer import ImageWriter def get_resource_path(relative_path): # 适配PyInstaller打包/未打包两种环境的路径 try: base_path = sys._MEIPASS # 打包后的临时资源目录 except Exception: base_path = os.path.abspath(".") # 未打包时的本地路径 return os.path.join(base_path, relative_path) # 生成origin条码的示例(其他条码生成部分同理修改) writer = ImageWriter() writer.font_path = get_resource_path("ARIAL.ttf") # 指定字体路径 barcode_origin = Code128(self.current_origin, writer=writer) barcode_origin.save("barcode_origin")
测试简化代码同步修改:
import sys import os import barcode from barcode.writer import ImageWriter def get_resource_path(relative_path): try: base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) def generate_barcode(code, filename): code128 = barcode.get_barcode_class('code128') writer = ImageWriter() writer.font_path = get_resource_path("ARIAL.ttf") barcode_instance = code128(code, writer=writer) barcode_instance.save(filename) generate_barcode('123456789', 'barcode.png')
步骤2:调整PyInstaller打包命令
确保字体文件被正确打包到exe的资源目录,注意Windows下用;分隔源路径和目标路径:
pyinstaller --noconfirm --onefile --console --add-data "C:/Users/RaulV/Desktop/Barcodes/ARIAL.ttf;." "C:/Users/RaulV/Desktop/Barcodes/combinedApp.py"
这里的.;表示把字体文件打包后放在exe解压后的根目录,和代码里get_resource_path("ARIAL.ttf")的路径对应。
额外注意事项
- 保持字体文件名大小写一致:代码里用
ARIAL.ttf,打包命令里的源文件路径也要对应(如果实际是arial.ttf要统一) - 不要依赖系统字体:打包后的exe在其他机器上可能没有你本地的ARIAL.ttf,必须把字体文件一起打包
- 调试时可打印
get_resource_path("ARIAL.ttf")的结果,确认路径是否正确
内容的提问来源于stack exchange,提问作者raúl vaquerizo
相关产品推荐
相关产品推荐

