Mat*_*lis 6 c c++ python enums cython
我是Cython的新手,但我正在努力学习更多内容,因为我希望能够直接从Python调用一组相当大而复杂的C/C++代码.
我已经能够完成这些示例,甚至可以包装我正在工作的主要项目的一小部分.但我已经坚持包装枚举.
我试图在一个非常简单的例子中突破我正在尝试的东西.
这是myenum.h中的C代码
// myenum.h
enum strategy {
slow = 0,
medium = 1,
fast = 2
};
Run Code Online (Sandbox Code Playgroud)
以下是我认为在pymyenum.pyx中作为wapper工作的内容
# distutils: language = c
cdef extern from "myenum.h" namespace "myenum":
cdef enum strategy:
slow,
medium,
fast
Run Code Online (Sandbox Code Playgroud)
这是我的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
))
Run Code Online (Sandbox Code Playgroud)
在这个目录中,我运行
python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
我得到了我的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
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到让我脱离这一点的正确例子.提前感谢任何可以提供帮助的人!
马特
如果您使用此pymyenum.pyx,它将按您的要求工作:
# distutils: language = c
cdef extern from "myenum.h":
cpdef enum strategy:
slow,
medium,
fast
Run Code Online (Sandbox Code Playgroud)
请注意,您的标头是没有'myenum'命名空间的ac标头,它cpdef适用于您想要导出到python的任何内容.cdef只是让cython代码中的东西可用.
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |