Cython构建的扩展无法导出数据类型和函数
我刚刚成功为Python构建了我的第一个C扩展,使用Cython来调用一个现有的C库。
我把我的数据类型和函数按照逻辑结构分成了几个部分(遵循C库的逻辑结构),然后把它们合并成一个pyx文件。之前我尝试单独添加文件时出现了错误(我记得是出现了类似“init已经定义”的错误),在谷歌上查找这个问题后,我发现我需要把所有的pyx文件合并成一个pyx文件。你可以查看这个链接。
这是我foo.pyx文件的内容:
#include "myarray.pyx"
#include "myset.pyx"
#include "mycalc.pyx"
这是我的设置文件的内容:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("foo", ["foo.pyx"],
libraries=["foo_core"])
]
)
扩展成功构建成了foo.so。我可以在Python命令行输入“import foo”,这也能正常工作。然而,当我尝试访问我在myarray.pxd、myarray.pyx等文件中声明/定义的任何类时,我收到了错误信息:
AttributeError: 'module' object has no attribute 'myArray'
然后我尝试使用dir()来查看foo模块导出了什么。令我惊讶的是,它列出了这些内容:
>>> dir(foo)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__test__']
为什么Cython没有导出我声明和定义的结构体、类和函数呢?我觉得我的pxd和pyx文件没有问题,因为正如我所说,它成功编译并生成了共享库(Python扩展)。
我在Ubuntu上使用的是Cython 0.15.1和Python 2.6.5。