Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Enums 使cython枚举可见_Enums_Cython - Fatal编程技术网

Enums 使cython枚举可见

Enums 使cython枚举可见,enums,cython,Enums,Cython,这一问题本质上是对这一问题的后续行动。具体来说,我想知道enum在共享模块中的可见性。 从本质上讲,我希望将包装好的C枚举作为python API的一部分(使用cython)。包装一些现有C代码的最简单方法是 lib.pyx(为了简单起见,我逐字添加了标题) 如果我将这个文件编译成一个共享库(比如lib.so),我可以直接使用枚举,也就是说,我可以键入python3-c“import lib;print(lib.Status)”,然后查看,这确实是预期的行为 现在假设我想将代码拆分为一个头(ak

这一问题本质上是对这一问题的后续行动。具体来说,我想知道enum在共享模块中的可见性。 从本质上讲,我希望将包装好的C枚举作为python API的一部分(使用cython)。包装一些现有C代码的最简单方法是
lib.pyx
(为了简单起见,我逐字添加了标题)

如果我将这个文件编译成一个共享库(比如
lib.so
),我可以直接使用枚举,也就是说,我可以键入
python3-c“import lib;print(lib.Status)”
,然后查看
,这确实是预期的行为

现在假设我想将代码拆分为一个头(aka
lib.pxd
) 包含上面的代码以及一个实现文件(aka
lib.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'