msgpack-pythonのインストール
jsonよりも速いmsgpackのインストールでのメモ.
msgpack-python0.1.12のインストールでのエラー
msgpack-python0.1.12のインストールで以下のようなエラーが出てました.
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c msgpack/_msgpack.c -o build/temp.linux-i686-2.7/msgpack/_msgpack.o msgpack/_msgpack.c: 関数 ‘__pyx_pf_7msgpack_8_msgpack_2unpackb’ 内: msgpack/_msgpack.c:2915:6: 警告: ‘__pyx_v_ret’ はこの関数内初期化されずに使用されるかもしれません [-Wuninitialized] gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions build/temp.linux-i686-2.7/msgpack/_msgpack.o -o build/lib.linux-i686-2.7/msgpack/_msgpack.so
apt-getやaptitudeではバージョンがmsgpack0.9でした.
なので最新版を入れるにはソースを手動でいれなければなりません.
そこでソース内のgithubにあったMakefile内に書いてあった以下のコマンドを実行するとインストールができました
%python setup.py build_ext -i -f %python setup.py build sdist %nosetests test #自分はホーム以下にいれているのでprefixで指定. %python setup.py install --prefix ~/local
あと手動の場合,Cython必須です.
msgpack-python0.1.12の利点
0.9の場合ファイルからロードするときにUnicodeでロード出来ず,Str型になってしまっていました.これではまたいちいち変換しなければならないので大変です.
>>> import msgpack as msg >>> f = open('test','w') >>> msg.dump([u'あ'],f) >>> f = open('test') >>> a = msg.load(f) >>> print type(a[0]) <type 'str'>
しかし,0.1.10以降だと以下のようにしてUnicode型で受け取ることが出来ます.
>>> msg.load(f,encoding='utf-8')