Django に
pylibmc
の
色々やってみた
誰かの
前提
以下の
OS
CentOS release 6.9 (Final)Python Version
Python 2.7.8Package (必要そうな
ものだけ 抜粋)
Django (1.10.6)
参考
pylibmc の インストールと 設定
pylibmc の インストール
pip install pylibmc -------------------------------------------------------------- Command "/usr/local/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ff0iS1/pylibmc/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-zNeMIE-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-ff0iS1/pylibmc/ --------------------------------------------------------------
を
libmemcached
がyum install libmemcached --------------------------------------------------------------- インストール: libmemcached.x86_64 0:0.31-1.1.el6 完了しました! ---------------------------------------------------------------
pip install pylibmc --------------------------------------------------------------- Command "/usr/local/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-RbaKMi/pylibmc/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-F4oT75-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-RbaKMi/pylibmc/ ---------------------------------------------------------------
django - pylibmc installation error using pip in python - Stack Overflow
を
libmemcached-devel
をyum install libmemcached-devel --------------------------------------------------------------- インストール: libmemcached-devel.x86_64 0:0.31-1.1.el6 完了しました! ---------------------------------------------------------------
pip install pylibmc --------------------------------------------------------------- Successfully built pylibmc Installing collected packages: pylibmc Successfully installed pylibmc-1.5.2 ---------------------------------------------------------------
settings.py の 設定
django document の
Django 1.11 よりも
このbehaviors
に
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211', 'OPTIONS': { 'binary': True, 'behaviors': { 'ketama': True, } } } }
コンソールから、 お試しで 実行
import _pylibmc RuntimeError: pylibmc requires >= libmemcached 0.32, was compiled with 0.31
libmemcached
の対応の
pylibmc の
version を 下げていき、 libmemcached 0.31 で 動くversionを インストールする。
もしくは、 libmemcached の
version を 上げる
があります。まず、pylibmc の<wbr> version を<wbr>下げる<wbr>
方向で、
pylibmc の version を 下げる
- libmemcached 0.31 で
動作する version を 探す
[python - Pip unable to install pylibmc - Stack Overflow][http://stackoverflow.com/questions/24437325/pip-unable-to-install-pylibmc] 上記StackOverFLowでの回答を 参考に、 1.2.3
をインストールします。 再度コンソールからpip uninstall pylibmc pip install pylibmc==1.2.3 ------------------------------------------------------------------- Successfully built pylibmc Installing collected packages: pylibmc Successfully installed pylibmc-1.2.3 -------------------------------------------------------------------
実行 同様のimport _pylibmc RuntimeError: pylibmc requires >= libmemcached 0.32, was compiled with 0.31
エラーが 出力されます。
更にバージョンを 下げてみます。 install できる versionの 確認します。 pip install pylibmc==x.x.x.x ----------------------------------------- Collecting pylibmc==x.x.x.x Could not find a version that satisfies the requirement pylibmc==x.x.x.x (from versions: 0.2, 0.3, 0.4, 0.5, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.6, 0.6.1, 0.7, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.8, 0.8.1, 0.8.2, 0.9, 0.9.1, 0.9.2, 1.0a0, 1.0b0, 1.0, 1.1, 1.1.1, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.3.0, 1.4.0, 1.4.1, 1.4.2, 1.4.3, 1.5.0, 1.5.1, 1.5.2) No matching distribution found for pylibmc==x.x.x.x -----------------------------------------
0.9.2
まで下げた ところ、 とimport _pylibmc RuntimeError: pylibmc requires >= libmemcached 0.32, was compiled with 0.31
いう エラーは 発生しなくなり、
動作するようになりました。
libmemcached の version を 上げる
pylibmc の
libmemcached の
repository の
remi の
CentOS6.7 64bitの
- memcached 自体の
install
centos の
古そうなので、
remi
yum --enablerepo=remi,epel install memcached memcached-devel ---------------------------------------------- memcached 1.4.36 ----------------------------------------------
1.4.36
に1.4.4
です。- libmemcached-last libmemcached-last-devel の
インストール
remi のlast
含まれています。
install できないので、
yum -erase libmemcached libmemcached-devel
yum --enablerepo=remi,epel install libmemcached-last libmemcached-last-devel
が
pylibmc の
再インストール と 動作確認
pylibmc の最新を インストールしな おします。 pip uninstall pylibmc pip install pylibmc ------------------------------- Installing collected packages: pylibmc Successfully installed pylibmc-1.5.2 -------------------------------
コンソールで
動作確認 今度はimport pylibmc ------------------------------------- Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/site-packages/pylibmc/__init__.py", line 71, in <module> import _pylibmc ImportError: libmemcached.so.2: cannot open shared object file: No such file or directory -------------------------------------
別の エラーに なりました。 pylibmc が 互換性なさそうなので、
github のリポジトリから、 インストールしてみます。 Githubから
pipで インストール pip uninstall pylibmc pip install git+https://github.com/lericson/pylibmc
再度、
コンソールで 動作確認 開発版だと、import pylibmc
互換性が あるようで、 動作するようになりました。
バイナリプロトコルで、 Memcached と 通信させる
Memcached には、
若干早そうです。django.core.cache.backends.memcached.PyLibMCCache
で、
バイナリプロトコル で
Django (1.10.6)
では
を
1. Django’s cache framework | Django documentation | Django をPyLibMCCache
で、
django-pylibmc の インストール
pip install django-pylibmc --------------------------------------------------- Installing collected packages: django-pylibmc Successfully installed django-pylibmc-0.6.1 ---------------------------------------------------
django-pylibmc-0.6.1
がsettings.py に 設定を 追加
django-pylibmc/django-pylibmc: A cache backend for Django using pylibmc
の
OPTIONS の
CACHES = { 'default': { 'BACKEND': 'django_pylibmc.memcached.PyLibMCCache', 'LOCATION': 'localhost:11211', 'TIMEOUT': 60 * 60 * 24, 'BINARY': True, 'OPTIONS': { # Maps to pylibmc "behaviors" 'tcp_nodelay': True, 'ketama': True } } }
サーバーを
memcached を-vv
オプションを
ログファイルに
27: Client using the binary protocol <27 Read binary protocol data: <27 0x80 0x0c 0x00 0x23 <27 0x00 0x00 0x00 0x00 <27 0x00 0x00 0x00 0x23
まとめ
以下まとめます。
一言で
言うと
CentOS 6.9 のDjango 1.10.6 の 組み合わせで、 pylibmcを 使うのは 面倒くさい。 entOS の
デフォルトで インストールできる Memcached
を使う 場合
pylibmc は0.9.2
を使うようにする。 remi の
リポジトリに ある、 Memcached
を使う 場合
pylibmc-1.5.2
だと動かないので、 githubから pipで 落とした ものを 使う。 バイナリープロトコルを
使う 場合
Django (1.10.6)
のdjango.core.cache.backends.memcached.PyLibMCCache
だと、
バイナリープロトコルを使えないので、 django-pylibmc
をインストールして、
django_pylibmc.memcached.PyLibMCCache
を使うようにする。
インストールの
個人的には、python-memcached
の
以上です。
コメント