GAE で pyFPDF を使うと IOError が発生する
念のため断っておくが、今回取り上げた pyFPDF は Google App Engine(GAE)に特化したライブラリではないため、GAE 以外の Python 環境においてはツイート中にある IOError は(基本的に)発生しないはずである。また、ライブラリ自身に手を加える行為も、本来あまり勧められるものではないことも付け加えておく。
ちなみに、パッケージ内の fpdf.py にある FPDF
クラスで、件の IOError を発生させていたのは、add_font()
関数と _putTTfontwidths()
関数の2箇所。
if unifilename:
try:
with open(unifilename, "wb") as fh:
pickle.dump(font_dict, fh)
except IOError:
if not exception().errno == errno.EACCES:
raise # Not a permission error.
if cid == 128 and cw127fname and not os.path.exists(cw127fname):
try:
with open(cw127fname, "wb") as fh:
font_dict = {}
font_dict['rangeid'] = rangeid
font_dict['prevcid'] = prevcid
font_dict['prevwidth'] = prevwidth
font_dict['interval'] = interval
font_dict['range_interval'] = range_interval
font_dict['range'] = range_
pickle.dump(font_dict, fh)
except IOError:
if not exception().errno == errno.EACCES:
raise # Not a permission error.
今回は EACCES の部分を EROFS に変更し、ひとまずの解決に至った。