Cython的多个输出文件有哪些?

时间:2018-06-19 04:45:46

标签: python python-2.7 cython cythonize

我使用Python 2.7并且是Cython的新手。

背景:

我的项目中有20多个py文件,然后我发现它们中有3个是缓慢的。

所以我对这些文件使用Cython,它们现在用Cython编译并成为pyd文件而没有任何问题。 (我花了几天时间研究这个问题,寻找最佳解决方案,改进Python编码的方式,但出于性能原因仍然需要使用Cython)

除了pyd文件,在build文件夹下,还有一些文件具有相同的文件名但扩展名不同的文件,即“.c”,“。exp”,“。lib”,“。obj”和“。 pyd.manifest“

似乎项目仍在工作,性能仍然在Cython级别,即使我移动了那些文件(“。c”“。exp”,“。lib”,“。obj”和“.pyd.manifest” ) 我对编译器的那些输出文件感到困惑,不知道什么是必要的,什么不是,以及如何使用它们并对待它们。

我的setup.py:

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

setup(
    ext_modules=cythonize("myCythonFile.pyx",)
)

1 个答案:

答案 0 :(得分:1)

所有这些文件都是临时文件。

Cython将您的每个pyx文件(只有一个)编译为匹配.c文件中的C代码。它还可以发出其他文件,比如HTML文件,使C代码更具可读性,但默认情况下,这就是它给你的全部,而且你没有要求任何额外的东西。

然后Cython询问你通过distutils配置的任何C编译器 - 在你的情况下,那是MSVC(Microsoft Visual C ++,Visual Studio附带的C和C ++编译器) - 并构建一个{{1}这些.dll文件中的/ .pyd文件。创建的文件及其含义的完整详细信息取决于您的编译器版本,但基本上它为每个.c文件创建.obj文件,然后创建.c导入库和{{ 1}}导出库以使用.lib,以及允许将库作为程序集加载的.exp文件。

如果编译代码中出现问题,这些文件中的一些 - 特别是.dll.manifest文件 - 非常便于调试。 (Cython生成的C代码可能非常难以追踪,但原始机器代码可能更糟糕。)

所有这些文件都可以帮助您在更快的更改后进行重建。

如果您想要执行更复杂的操作,例如将其他库链接到您的库,也需要其中一些文件。

如果你没有做任何这些事情,你就不需要它们。但是也没有理由摆脱它们。 (如果要重新分发代码,可能需要构建源代码包和二进制轮,并且这两者都知道如何跳过不必要的中间文件。)