我正在尝试使用pycxx(http://cxx.sourceforge.net/PyCXX-Python3.html)编写Python扩展。为了进行实验,我遵循了README中列出的步骤。但是,我发现在全局级别的扩展中定义的方法不是可腌制的。
In [1]: import simple
In [2]: simple
Out[2]: <module 'simple' from '<pycxx_dir>/obj/simple.so'>
In [3]: pickle.dumps(simple.func)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-2284e569486f> in <module>
----> 1 pickle.dumps(simple.func)
TypeError: can't pickle PyCapsule objects
这是因为simple.func.__reduce__
返回了一个包含PyCapsule
对象的元组,该对象不可腌制。
In [1]: simple.func.__reduce__()
Out[1]:
(<function getattr>,
((<capsule object NULL at 0x7f8851d77cf0>,
<capsule object NULL at 0x7f8851d77450>),
'func'))
我正在使用linux
在Python 3.7
机器上工作。