关于python:Cython构建的扩展无法导出数据类型和函数

Cython built extension fails to export data types and functions

我刚刚设法为python构建了我的第一个C扩展,使用cython调用现有的C库。

我将我的数据类型和函数声明和定义为逻辑组件(遵循C库的逻辑结构),并将它们组合到一个PYX文件中-当我试图单独添加文件时发生错误后(IIRC我得到了一个错误,该错误与已经定义的init行一致-在Google上研究该问题后,我发现我必须将所有的PYX文件信息合并为一个PYX文件)-请参见此链接。

这是我的foo.pyx文件内容的副本:

1
2
3
#include"myarray.pyx"
#include"myset.pyx"
#include"mycalc.pyx"

这是安装文件的副本:

1
2
3
4
5
6
7
8
9
10
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中。然后我可以在python cli中键入"import foo"。这也行。但是,当我尝试访问我在myarray.pxd、myarray.pyx等中声明/定义的任何类时,我会收到错误消息:

1
AttributeError: 'module' object has no attribute 'myArray'

然后我尝试dir(),查看foo模块正在导出什么。令我惊讶的是,它列出了:

1
2
>>> dir(foo)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__test__']

为什么Cython无法导出我声明和定义的结构、类和函数?我不认为我的PXD和PYX文件有什么问题,因为正如我所说,它编译成功,生成了共享lib(python extendion)。

我在Ubuntu上使用cython 0.15.1和python 2.6.5


(P)EDOCX1 0宣布开始一条评论线或你的EDOCX1字体是有效的经验性。(p)(P)EDOCX1是一种蓝调仪器。使用字母名称3和SIMPort Instead。(p)