2016年3月17日 星期四

[win32] pyBarcode 在 cx_Freeze 之後,產生 barcode image 時出現 IOError: cannot open resource

稍微筆記一下這件事:

pyBarcode 使用 cx_Freeze 包裝成在沒有 python 環境下執行,
在產生圖檔的時候,出現IOError 的問題:

原因為 字型檔沒有在 cx_Freeze 包裝後的目錄中被找到:

[python installation directory]\Lib\site-packages\barcode\writer.py
 
PATH = os.path.dirname(os.path.abspath(__file__))
FONT = os.path.join(PATH, 'DejaVuSansMono.ttf')

然而 DejaVuSansMono.ttf 字型檔是附加在 pyBarcode 套件中,而路徑是使用絕對路徑,在經由 cx_Freeze 包裝後,自然就找不到。

MY Workaround:

使用 Windows 中的預設字型, 修改成:

#FONT = os.path.join(PATH, 'DejaVuSansMono.ttf')
FONT = 'arial.ttf'
 
這樣 Barcode image 上面的字型即為 Arial. 
或是,也可以自行將 DejaVuSansMono.ttf 裝至系統。
(這樣需要執行程式的電腦都要安裝該字型…不建議啦) 
  
 

沒有留言: