gpt4 book ai didi

python - Cython 的新手......似乎无法正确包装枚举

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:22 26 4
gpt4 key购买 nike

我是 Cython 的新手,但我想了解更多,因为我希望能够直接从 Python 调用相当大且复杂的 C/C++ 代码集。

我已经能够很好地运行这些示例,甚至能够包装我正在处理的主要项目的一小部分。但是我一直坚持包装枚举。

我试图在一个非常简化的示例中阐明我正在尝试的内容。

这是myenum.h中的C代码

// myenum.h
enum strategy {
slow = 0,
medium = 1,
fast = 2
};

这是我认为可以在 pymyenum.pyx 中用作 wapper 的东西

# distutils: language = c
cdef extern from "myenum.h" namespace "myenum":
cdef enum strategy:
slow,
medium,
fast

这是我的 setup.py

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules = cythonize(
"pymyenum.pyx", # our Cython source
sources=["myenum.h"], # additional source file(s)
language="c", # generate C code
))

在这个目录下,我运行

python setup.py build_ext --inplace

我得到了我的 pymyenum.so,我可以导入它!是的!但是我无法访问策略。

In [1]: import pymyenum

In [2]: pymyenum.
pymyenum.c pymyenum.pyx pymyenum.so

In [2]: pymyenum.strategy
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-2-80980071607b> in <module>()
----> 1 pymyenum.strategy

AttributeError: 'module' object has no attribute 'strategy'

In [3]: from pymyenum import strategy
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-3-9bae6637f005> in <module>()
----> 1 from pymyenum import strategy

ImportError: cannot import name strategy

我似乎找不到合适的例子来让我摆脱困境。提前感谢任何可以提供帮助的人!

马特

最佳答案

如果你使用这个 pymyenum.pyx,它将按照你想要的方式工作:

# distutils: language = c
cdef extern from "myenum.h":
cpdef enum strategy:
slow,
medium,
fast

请注意,您的 header 是一个没有 'myenum' 命名空间的 c header ,它是 cpdef 用于您想要导出到 python 的任何内容。 cdef 只是让 cython 代码可用。

关于python - Cython 的新手......似乎无法正确包装枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37350303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com