我可以使用python 3.2进行pylibmc吗?

时间:2013-04-12 17:31:21

标签: python python-3.x memcached

我安装了一些依赖项:

sudo apt-get install python3.2-dev
sudo apt-get install libmemcached-dev

试图:

pip install pylibmc

在virtualenv中使用我的python 3.2

但是有这个:

_pylibmcmodule.c:77:9: error: ‘PylibMC_Client’ has no member named ‘ob_type’
_pylibmcmodule.c:1812:39: error: ‘PyInt_Type’ undeclared (first use in this function)
_pylibmcmodule.c:1841:53: error: ‘PylibMC_Client’ has no member named ‘ob_type’
error: command 'gcc' failed with exit status 1

我该如何解决? (它适用于python 2.7)

1 个答案:

答案 0 :(得分:3)

编辑:看起来它在“master”中工作但尚未发布。

我写了一些python 3支持 - see my repo branch

我修改了测试但仍有一些失败:

1. "test_touch" (test_client.py)  

对于python 2和3,它都失败了。即使是未更改的代码。 (看起来像我的memcache问题 - 不知道)

>       ok_(self.mc.touch(touch_test, 5))
E       SystemError: error return without exception set

2. "test_cas" (test_client.py)

仅适用于python 3. Python 2没问题。

>           rv, cas = mc.gets(k)
E           ValueError: gets without cas behavior

使用pickle保存Integer对象可能会导致这种情况 负责的代码是:

} else if (PyLong_Check(value_obj)) {
    serialized->flags |= PYLIBMC_FLAG_LONG;
    PyObject* tmp = PyNumber_Long(value_obj);
    store_val = PyObject_Bytes(tmp);
    Py_DECREF(tmp);

我无法在python 3中使用它,因为PyObject_Bytes generates an error

>       ok_(mc.set(k, 0))
E       TypeError: 'int' object is not iterable

我运行这样的测试:

py.test tests/test_client.py