12

我是 Matlab 和 C++ 用户,最近发现 python (spyder) 可以替代两者。我认为 python 的主要好处之一是能够在解释器模式下工作,然后一旦我对结果感到满意,就可以无缝地将其转换为快速编译的代码。解释环境非常适合原型制作、在断点处停止时分析数据、到处乱扔图和图像等。

我开始研究 Cython,但我并不完全了解编程流程。假设您有一个想要加速的 .py 代码 - 您是否必须从头开始编写一个 .pyx 文件?您可以在解释模式下运行一个 .pyx 文件,就好像它是一个常规的 .py 文件(在编译之前)?如何调试 .pyx 文件中的代码?

4

1 回答 1

3

我对 Cython 没有太多经验,但从他们文档中的这个条目来看,推荐的工作流程是有一个setup.py包含以下行的文件:

from distutils.core import setup
from Cython.Build import cythonize

setup(name='Hello world app', ext_modules=cythonize("hello.pyx"))

hello.pyx只是一个示例文件,您必须替换字符串才能引用您的 Python 脚本。

之后你就可以打电话了

python setup.py build_ext --inplace

这将编译您的代码并为您留下一个新文件。现在,只要该文件位于同一目录中,您就可以轻松导入您在文件中定义的内容,就像使用任何其他模块一样。hello.pyx例如,假设你用函数编译了一个文件f,你可以这样写:

from hello import f

然后继续使用f


现在,关于您的其他问题。.pyx似乎只是表明,这应该是 Cython 代码,没有真正的区别。使用setup.py如上所述的脚本方法,您还可以引用以 . 结尾的文件.py。但是,Python 不允许您从.pyx文件中导入,只能从编译后创建的文件中导入。

至于如何调试文件中的代码.pyx,我没有足够的信息,尽管您可能只是像调试文件一样调试非编译.py文件。

于 2019-05-12T21:40:56.933 回答