0

我最近遇到了cython 的 sentdex 教程。在尝试他的教程代码时,我注意到我们将如何在编译之前调试我们的 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 代码的正确方法是什么?

4

1 回答 1

1

要检查您的 Cython 代码在语法上是否正确,并且静态分析没有可检测到的明显问题,您可以使用cythoncythonize命令行工具。

cython path/to/file.pyx运行 Cython 编译器,将 Cython 代码翻译成 C 代码,保存在同名文件中,.c扩展名为.pyx. 如果检测到问题,它们将被写入 STDOUT/STDERR,尽管.c可能仍会生成一个文件。

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

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

于 2017-10-06T15:47:51.397 回答