python-qrcodeとは
Pythonでqrcodeを扱うための外部パッケージに「qrcode」がある。
- インストール方法
$ pip3 install qrcode
で、installすると、qrコマンドが使えるようになる。次のように使うと、コマンドラインからQRコードを生成できて便利。
$ qr "http://kamatari.github.io" > blog_url.png
発生する問題
ただ、次のようなエラーがPython3系で発生する。メッセージを見ると、2系から3系になったときにstring型とbyte型を区別して扱うようになった影響のエラーっぽいことが分かる。
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/bin/qr", line 9, in <module>
load_entry_point('qrcode==5.1', 'console_scripts', 'qr')()
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/qrcode/console_scripts.py", line 60, in main
img.save(sys.stdout)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/qrcode/image/pil.py", line 32, in save
self._img.save(stream, kind)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PIL/Image.py", line 1665, in save
save_handler(self, fp, filename)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PIL/PngImagePlugin.py", line 690, in _save
fp.write(_MAGIC)
TypeError: write() argument must be str, not bytes
解決方法
qrcodeのconsole_scrripts.py
のimg.save
の部分を直せばよさそうだ。しかし、githubにある本家のコードを見に行った所、すでに修正されていた。pypiにリリースされるまでは、下のcommitを参考に自分の環境のファイルを修正するか、githubから落としてきたコードを使おう。(修正する場合、自分の環境のファイルがどこにあるかは、表示されているエラーの内容を確認のこと)