gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:55 25 4
gpt4 key购买 nike

我刚刚成功地为 Python 构建了我的第一个 C 扩展,使用 Cython 调用现有的 C 库。

我将我的数据类型和函数声明并定义为逻辑组件(遵循 C 库的逻辑结构),然后将它们合并到一个 pyx 文件中——当我尝试单独添加文件时发生错误(IIRC 我得到一个错误,类似于 init 已经定义 - 在谷歌上研究了这个问题后,我发现我必须将所有 pyx 文件信息合并到一个 pyx 文件中) - 参见 this link .

这是我的 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 CLI 中键入“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

最佳答案

# 声明注释行的开始,因此您的 foo.pyx 实际上是空的。

include 是一种钝器。使用 *.pxd and cimport相反。

关于python - Cython 构建的扩展无法导出数据类型和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8032861/

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