我在一个模块中定义了一个 namedtuple 类型,该模块由两个类 foo 和 bar 组成,在模块的唯一文件mod.py. 我能够毫无问题地创建 foo 和 bar 的实例并腌制它们。我现在正在尝试对它进行 Cythonize,以便我可以将模块作为字节码分发。
模块文件结构如下所示:
./mod.pyx
./setup.py
./demo.py
Run Code Online (Sandbox Code Playgroud)
‘mod.pyx’的内容是:
import collections
foo = collections.namedtuple('foo', 'A B')
class bar:
def __init__(self,A,B):
self.A = A
self.B = B
Run Code Online (Sandbox Code Playgroud)
内容setup.py为:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
setup(
ext_modules= cythonize([Extension('mod', ['mod.pyx'])])
)
Run Code Online (Sandbox Code Playgroud)
我使用命令 cythonize 它python setup.py build_ext --inplace创建编译的模块文件:
./mod.cp37-win_amd64.pyd
Run Code Online (Sandbox Code Playgroud)
运行以下demo.py:
import mod, pickle
ham = mod.foo(1,2)
spam = mod.bar(1,2)
print(pickle.dumps(spam))
print(pickle.dumps(ham)) …Run Code Online (Sandbox Code Playgroud)