我在腌制 Cython 类时遇到问题,但仅当它在包中定义时。这个问题之前在网上提到过,但他们没有说明它是如何解决的。这里有两个组件:使用__reduce__方法的 Cython 酸洗和包错误。
我将首先展示它在没有包部分的情况下是如何工作的。这个例子工作正常。
我的 Cython 文件是reudce.pyx:
cdef class Foo(object):
cdef int n
def __init__(self, n):
self.n = n
def __reduce__(self):
return Foo, (self.n,)
Run Code Online (Sandbox Code Playgroud)
这可以编译为setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("reduce", ["reduce.pyx"])]
)
Run Code Online (Sandbox Code Playgroud)
通过执行 python setup.py build && cp build/lib*/reduce.so .
测试脚本被调用test_reduce.py并且是:
import reduce
import pickle …Run Code Online (Sandbox Code Playgroud)