不能导入编译用Cython功能成功的编译
问题描述:
我在Windows 10(Spyder的3.2.3)和Python 3.6.3以下的Tutorial测试出用Cython后,我写了这个功能:不能导入编译用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"),
)
编译没有抛出任何错误和大量创建的文件:
在同一目录与原始文件:
- a
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
文件
的Cython tutorial告诉我我需要pyd
文件,所以我删除了文件名中的cp36-win_amd64
。
我可以导入它没有错误,但我的功能t3
只是从来没有出现,它根本就没有。
没有任何类型的错误信息我现在处于亏损状态。有时在第三方软件包中遇到类似这样的错误,但我从来不明白是什么导致了它们。为什么我的功能不在那里?
我还想知道所有这些附加文件的重点,哪些是我真正需要的?
答
你已经写了一个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函数。
http://docs.cython.org/en/latest/src/userguide/language_basics.html#python-functions-vs-c-functions – oz1
谢谢。你可以做出答案,我会给你点数。 – Khris
但这只是一个链接的答案... –