Python 如何在编译之前调试cython代码?

Python 如何在编译之前调试cython代码?,python,cython,cythonize,Python,Cython,Cythonize,我最近遇到过。在尝试他的教程代码时,我注意到我们将如何在编译cython代码之前调试它 我们可以通过在解释器中运行它来调试原始代码 #example_original.py def test(x): y = 0 for i in range(x): y += i return y print test(20) 但是,cythonized代码不起作用。这是我试过的两种方法 1) py文件 错误 2) pyx文件 错误 在编译cython代码之前,调试cyt

我最近遇到过。在尝试他的教程代码时,我注意到我们将如何在编译cython代码之前调试它

我们可以通过在解释器中运行它来调试原始代码

#example_original.py
def test(x):
    y = 0
    for i in range(x):
        y += i
    return y
print test(20)
但是,cythonized代码不起作用。这是我试过的两种方法

1) py文件

错误

2) pyx文件

错误


在编译cython代码之前,调试cython代码的正确方法是什么?

要检查cython代码的语法是否正确,以及静态分析是否可以检测到明显的问题,可以使用
cython
cythonize
命令行工具

cython path/to/file.pyx
若要运行cython编译器,请将cython代码转换为保存在具有
.C
扩展名而不是
.pyx
的同名文件中的C代码。如果检测到问题,它们将被写入STDOUT/STDERR,尽管仍可能生成
.c
文件

您可以将
-a
选项传递给该程序,让编译器生成一个额外的HTML文件,该文件将突出显示导致额外Python开销的代码部分


这实际上并没有将代码编译到可以使用Python导入的共享库中。您需要在生成的C代码上调用C编译器,通常是通过Python的
setuptools
/
distutils
工具链进行调用。

我认为这个问题没有多大意义。Cython是一种编译语言。要调试它,您必须编译它。
#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
#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