Python Can';t在成功编译后导入已编译的cython函数
我正在Windows 10(Spyder 3.2.3)和Python 3.6.3上测试Cython,我编写了以下函数:Python Can';t在成功编译后导入已编译的cython函数,python,cython,Python,Cython,我正在Windows 10(Spyder 3.2.3)和Python 3.6.3上测试Cython,我编写了以下函数: from libc.stdlib cimport malloc, free cdef int** t3(int* El, int lEl): cdef int lElsq = lEl*lEl cdef int i,j cdef int** rr = <int**> malloc(2*sizeof(int*)) for i in ra
from libc.stdlib cimport malloc, free
cdef int** t3(int* El, int lEl):
cdef int lElsq = lEl*lEl
cdef int i,j
cdef int** rr = <int**> malloc(2*sizeof(int*))
for i in range(2):
rr[i] = <int*> malloc(lElsq*sizeof(int))
for i in range(lEl):
for j in range(lEl):
rr[0][i*lEl+j] = El[i]
rr[1][i*lEl+j] = El[j]
return rr
编译没有引发任何错误,创建了许多文件:
在与原始文件相同的目录中:
- 同名的
文件tempCython.c
- a
文件tempCython.cp36-win\u amd64.pyd
build\temp.win-amd64-3.6\Release
:
- a
文件tempCython.obj
- 一个
文件tempCython.cp36-win\u amd64.exp
- 一个
文件tempCython.cp36-win_amd64.lib
pyd
文件,所以我删除了文件名中的cp36-win\u amd64
我可以毫无错误地导入它,但我的函数t3
从未出现,它根本不存在
没有任何错误信息,我现在不知所措。我曾经在第三方软件包中遇到过类似的错误,但我始终不明白是什么导致了这些错误。为什么我的功能不在那里
我还想知道所有这些附加文件的意义,我实际上需要哪些文件?您已经编写了一个
cdef
函数,并试图从python调用它。不幸的是,cdef
函数在python中是不可见的(请参阅),因此您需要做更多的工作来向python公开您的函数。特别是,您需要编写一个调用cdef
函数的def
函数或cpdef
函数,然后从python调用该函数。谢谢。你可以回答这个问题,我会给你分数。但这是一个只有链接的答案…我按照你说的做了,但仍然得到一个“无属性”错误。我使用的是一个def
函数,它的基本意思是返回cfunction(params)
。除非您共享一个完整的可运行示例和完整的错误消息,否则很难提供帮助。也许最好自己问个问题。
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("tempCython.pyx"),
)