我在{10}之后测试了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 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
我将它放入pyx
文件中,并按照教程使用MS Visual Studio 14编译器编译它。
命令:%run setup.py build_ext --inplace
设置文件:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("tempCython.pyx"),
)
编译没有抛出任何错误,并且创建了大量文件:
在与原始文件相同的目录中:
tempCython.c
文件tempCython.cp36-win_amd64.pyd
文件在子目录build\temp.win-amd64-3.6\Release
中:
tempCython.obj
文件tempCython.cp36-win_amd64.exp
文件tempCython.cp36-win_amd64.lib
文件 Tutorial告诉我我需要pyd
文件,因此我删除了文件名中的cp36-win_amd64
。
我可以毫无错误地导入它,但我的函数t3
从未显示过,它根本就不存在。
没有任何错误信息,我现在感到茫然。我有时在第三方软件包中遇到过这样的错误,但我从来没有理解是什么导致了它们。为什么我的功能不在那里?
我还想知道所有这些附加文件的重点,我实际需要哪些文件?
答案 0 :(得分:1)
您已编写cdef
函数并尝试从python中调用它。不幸的是,cdef
函数在python中是不可见的(参见http://docs.cython.org/en/latest/src/userguide/language_basics.html#python-functions-vs-c-functions)所以你需要做更多的工作来将你的函数暴露给python。特别是你需要编写调用def
函数的cpdef
函数或cdef
函数,然后从python中调用 函数。