python3のNo module named ‘StringIO’エラーを解決する方法

caffe2のtutorialはpython2用に書かれているので、caffe2をインストールする時は、python2.7にインストした方がいいことは言うまでもないだろう。しかし、誤ってpython3.6の環境にインストしてしまい、再ビルドに半日潰したくない場合は、非常に面倒な、python2コードをpython3用に改変する作業が必要になる。

caffe2のMNISTチュートリアルに必要なデータを作る以下のコードがこのサイトに載っている。

コード
printの部分を()で括った後でこのコードを実行すると、以下のようなエラーが吐き出される。

ModuleNotFoundError: No module named 'StringIO'

このサイトが指摘しているようなやり方を踏襲すると、以下のようなエラーが吐き出される。

AttributeError: type object '_io.StringIO' has no attribute 'StringIO'

StringIO.StringIO(r.content)の部分をStringIO(r.content)のように書き変えたら、以下のようなエラーが吐き出された。

TypeError: initial_value must be str or None, not bytes

ネットで色々調べた結果、このサイトが一番適格な解決策を提供してくれた。
StringIO(r.content)の部分を、io.BytesIOに変えたら、無事データのダウンロードが出来た。

Downloading... http://download.caffe2.ai/databases/mnist-lmdb.zip to /home/aho/caffe2_notebooks/tutorial_data/mnist
Completed download and extraction.
Downloading... http://download.caffe2.ai/datasets/mnist/mnist.zip to /home/aho/caffe2_notebooks/tutorial_data/mnist
Completed download and extraction.
DB:  /home/aho/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-leveldb
DB:  /home/aho/caffe2_notebooks/tutorial_data/mnist/mnist-test-nchw-leveldb

pythonプログラミングの学習は思っていたより難しい。特に、機械学習の分野は高度な数学力が要求されるので、数学に自身の無い人間には敷居がかなり高いような気がしてきた。

スポンサーリンク