小编Por*_*guy的帖子

命名元组实例的酸洗正常成功,但在模块被 Cythonized 时失败

我在一个模块中定义了一个 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)

python cython python-3.x

6
推荐指数
1
解决办法
409
查看次数

标签 统计

cython ×1

python ×1

python-3.x ×1