如何在Cythonize()上使用annotate = True

时间:2019-07-08 04:37:05

标签: python-3.x cython cythonize

我是Cython的新手,但可以按照以下basic guide from the official docs进行操作:

它说的就是: “ Cython可以可视化与Python对象和Python的C-API进行交互的位置。为此,请将annotate = True参数传递给cythonize()。它会生成HTML文件。”

令我感到惊讶的是,我不能只用Google来搜索它,也没有人在stackoverflow上问过这个。但是我不知道如何使它工作。它没有具体显示它想要什么。所以我尝试了最明显的语法(在Setup.py中):

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

setup(
    ext_modules = cythonize("gpcython.pyx", annotate=True)
)

虽然这不会引发错误,但是我也看不到生成任何HTML。

我正在Windows上使用最新版本的Python 3.7和Cython 0.29.12。

https://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html

3 个答案:

答案 0 :(得分:4)

您可以尝试删除生成的c或cpp文件。如果pyx没有变化,cython将不会尝试重复构建。我不知道cython如何跟踪构建依赖关系。我想这类似于make的工作方式。

答案 1 :(得分:0)

这是我最终使用的东西,现在似乎可以正常工作了:

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

import Cython.Compiler.Options
Cython.Compiler.Options.annotate = True

setup(
    ext_modules = cythonize("gpcython.pyx", annotate=True)
)

答案 2 :(得分:0)

也许晚了,但是我像下面这样解决了这个问题:

更改.pyx源文件或删除.c文件并再次运行setup.py以强制cython重新构建它。

--force参数可能不起作用。