Cython-导入类到pyx文件



例如我们有两个类

总线-实现物理总线。

src/汽车/bus.pxd

cdef class Bus:
cdef int get_item(self)

src/汽车/bus.pxd:

cdef class Bus: 
cdef int get_item(self):
return 5

CPU-实现物理cpu处理器

src/cpu/cpu.pyx:

cimport bus.Bus as Bus
cdef class Cpu:
cdef Bus bus
cdef __cinit__(self, Bus bus):
self.bus = bus

py:

from setuptools import setup, Extension
import sys
import numpy 
USE_CYTHON = False
files = [
('src.bus', 'src/bus/bus'),
('src.cpu', 'src/cpu/cpu'),
] 
if '--use-cython' in sys.argv:
USE_CYTHON = True
sys.argv.remove('--use-cython')

ext = '.pyx' if USE_CYTHON else '.c'

extensions = []
for package_path, file_path in files:
extensions.append(
Extension(package_path,[f"{file_path}{ext}"],
language='c',
include_dirs=['src/c/'])
)
if USE_CYTHON:
from Cython.Build import cythonize
extensions = cythonize(extensions)
setup(
ext_modules=extensions,
include_dirs=[numpy.get_include()]
) 

但是,在编译这个例子时,编译器会抛出'Bus' is not a type identifier的错误。任何建议吗?

所以,在cython中,我们必须在编译时使用pxd文件进行声明。因此,在编译导入时必须添加__init__.pxd。另外,我创建了cpu.pxd文件,里面我写了from bus cimport Bus.

最新更新