Enums 使cython枚举可见
这一问题本质上是对这一问题的后续行动。具体来说,我想知道enum在共享模块中的可见性。 从本质上讲,我希望将包装好的C枚举作为python API的一部分(使用cython)。包装一些现有C代码的最简单方法是Enums 使cython枚举可见,enums,cython,Enums,Cython,这一问题本质上是对这一问题的后续行动。具体来说,我想知道enum在共享模块中的可见性。 从本质上讲,我希望将包装好的C枚举作为python API的一部分(使用cython)。包装一些现有C代码的最简单方法是 lib.pyx(为了简单起见,我逐字添加了标题) 如果我将这个文件编译成一个共享库(比如lib.so),我可以直接使用枚举,也就是说,我可以键入python3-c“import lib;print(lib.Status)”,然后查看,这确实是预期的行为 现在假设我想将代码拆分为一个头(ak
lib.pyx
(为了简单起见,我逐字添加了标题)
如果我将这个文件编译成一个共享库(比如lib.so
),我可以直接使用枚举,也就是说,我可以键入python3-c“import lib;print(lib.Status)”
,然后查看
,这确实是预期的行为
现在假设我想将代码拆分为一个头(akalib.pxd
)
包含上面的代码以及一个实现文件(akalib.pyx
)cimport
,其中包含头文件:
from lib cimport Status
def test():
print Status.GOOD
我可以再次编译这个项目,但是,结果是完全不同的。
我可以访问函数test
,但是python3-c“import lib;lib.test()”
只返回0
,而不是
而且,python3-c“import lib;print(lib.Status)”
现在给了我
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: module 'lib' has no attribute 'Status'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:模块“lib”没有属性“Status”
简而言之:pxd文件中声明的枚举不包括在最终模块中,即使它声明为cpdef
这种行为是故意的吗?有没有办法将声明包含到生成的模块中?也许这是Cython中的一个bug,值得报告:当枚举定义位于pxd文件中时,不会生成与定义的p部分相关的整个代码
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: module 'lib' has no attribute 'Status'