Screaming Loud

日々是精進

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')