我最近遇到了sentdex tutorial for cython。在尝试他的教程代码时,我注意到的是在编译之前我们将如何调试我们的cython代码。
我们可以通过在我们的解释器中运行example_original.py
来调试原始代码。
#example_original.py
def test(x):
y = 0
for i in range(x):
y += i
return y
print test(20)
但是cythonized代码非常有用。这是我试过的两种方式
1)py文件
#example_cython.py
cpdef int test(int x):
cdef int y = 0
cdef int i
for i in range(x):
y += i
return y
print test(5)
错误
File "example_cython.py", line 3
cpdef int test(int x):
^
SyntaxError: invalid syntax
2)pyx文件
#example_cython.pyx
cpdef int test(int x):
cdef int y = 0
cdef int i
for i in range(x):
y += i
return y
print test(5)
错误
./example_cython: not found
在编译cython代码之前调试cython代码的正确方法是什么?
答案 0 :(得分:0)
要检查您的Cython代码在语法上是否正确,并且静态分析无法检测到明显的问题,您可以使用cython
或cythonize
命令行工具。
cython path/to/file.pyx
运行Cython编译器,将Cython代码转换为保存在文件中的C代码,该文件具有.c
扩展名而不是.pyx
的同名。如果检测到问题,它们将被写入STDOUT / STDERR,但仍可能生成.c
文件。
您可以将-a
选项传递给此程序,以使编译器生成一个额外的HTML文件,该文件将突出显示部分代码,从而产生额外的Python开销。
这实际上并没有将您的代码编译成可以使用Python导入的共享库。您需要在生成的C代码上调用C编译器,通常是通过Python的setuptools
/ distutils
工具链。