当前位置: 首页 > 面试题库 >

导入cython函数:AttributeError:'模块'对象没有属性'fun'

董同
2023-03-14
问题内容

我写了一个小cython代码

#t3.pyx
from libc.stdlib cimport atoi

cdef int fun(char *s):
        return atoi(s)

setup.py文件是

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

setup(ext_modules=cythonize("t3.pyx"))

setup.py使用此命令运行

python setup.py build_ext --inplace

这给我

Compiling t3.pyx because it changed.
Cythonizing t3.pyx
running build_ext
building 't3' extension
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-     prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-  strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c    t3.c -o build/temp.linux-x86_64-2.7/t3.o
t3.c:556:12: warning: ‘__pyx_f_2t3_fun’ defined but not used [-Wunused-function]
 static int __pyx_f_2t3_fun(char *__pyx_v_s) {
        ^
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/t3.o -o /home/debesh/Documents/cython/t3/t3.so

当我在python解释器中运行时,它向我显示

>>> import t3
>>> t3.fun('1234')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'fun'
>>>

问题答案:

这里的问题是您使用cdef而不是定义了方法defcdef方法只能从cython代码中调用。

您可以在文档的Python函数与C函数部分中找到详细信息。

就像在Python中一样,Python函数是使用def语句定义的。他们将Python对象作为参数并返回Python对象。

使用新的cdef语句定义C函数。它们采用Python对象或C值作为参数,并且可以返回Python对象或C值。

重要的部分:

在Cython模块中,Python函数和C函数可以自由调用,但是解释后的Python代码只能从模块外部调用Python函数。因此,任何要从Cython模块“导出”的函数都必须使用def声明为Python函数。



 类似资料:
  • 问题内容: 我正在尝试使用Python下载网站的HTML源代码,但收到此错误。 我在这里遵循指南:http : //www.boddie.org.uk/python/HTML.html 我正在使用Python 3。 问题答案: 这适用于Python2.x。 对于Python 3,请在docs中查看:

  • 变得非常困惑。四处寻找,但找不到任何有用的帮助。我知道错误了 回溯(最近一次调用):文件“/Users/Andrew/Desktop/password.py”,第2行,格式为cgi。Fieldstorage()AttributeError:“模块”对象没有属性“Fieldstorage”

  • 问题内容: 我正在尝试运行一个简单的代码,并且在Canopy中安装了matplotlib和numpy的所有依赖项。还是我出错了。 错误: 我已经为numpy和matplotlib安装了依赖项:1.)libsvm-3.17.win64-py2.7 2.)pyparsing-2.0.3-1.win64-py2.7 3.)python-dateutil-2.4.2-2。 win64-py2.7 4.)p

  • 问题内容: 我正在尝试使用Selenium WebDriver生成Firefox实例。过去,在安装geckodriver并确保它位于我的PATH之后,我能够执行此操作。但是,我切换到使用phantomjs已有大约一年的时间,直到最近才决定再次试用Firefox。不幸的是,现在当我尝试实例化webdriver.Firefox对象时,我得到了AttributeError,称该对象没有称为“ Firef

  • 问题内容: 尝试运行python脚本时,出现错误。我正在使用Python 2.6。 完整错误: 问题答案: 我认为无论您要运行什么,都期望将其与python的特殊调试版本一起使用。通常在sys模块的标准发行版中找不到,并且我相信如果您构建调试python,它将在那里: http://docs.python.org/c-api/intro.html#debugging- builds 这可能也可能是

  • 问题内容: Python 2.7和Django 1.10错误: main / urls.py article / urls.py 结构体: APP / main / urls.py APP /文章/urls.py 问题答案: 在main / urls.py中 要么 您可以从Django文档中了解更多信息