2017-10-13 151 views
0

我在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只是从来没有出现,它根本就没有。

没有任何类型的错误信息我现在处于亏损状态。有时在第三方软件包中遇到类似这样的错误,但我从来不明白是什么导致了它们。为什么我的功能不在那里?

我还想知道所有这些附加文件的重点,哪些是我真正需要的?

+2

http://docs.cython.org/en/latest/src/userguide/language_basics.html#python-functions-vs-c-functions – oz1

+0

谢谢。你可以做出答案,我会给你点数。 – Khris

+0

但这只是一个链接的答案... –

回答