Python Cython的多个输出文件用于什么?

Python Cython的多个输出文件用于什么?,python,python-2.7,cython,cythonize,Python,Python 2.7,Cython,Cythonize,我使用的是Python2.7,是Cython的新手 背景: 我在我的项目中有20多个py文件,然后我发现其中3个文件的速度很慢 所以我使用Cython来处理这些文件,它们现在用Cython编译并成为pyd文件,没有任何问题。(我花了几天时间研究这个问题,寻找最佳解决方案,改进用Python编写代码的方式,但出于性能原因,我仍然必须使用Cython) 除了pyd文件外,在build文件夹下还有几个文件名相同但扩展名不同的文件,即“.c”、“.exp”、“.lib”、“.obj”和“.pyd.man

我使用的是Python2.7,是Cython的新手

背景:

我在我的项目中有20多个py文件,然后我发现其中3个文件的速度很慢

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

除了pyd文件外,在build文件夹下还有几个文件名相同但扩展名不同的文件,即“.c”、“.exp”、“.lib”、“.obj”和“.pyd.manifest”

即使我把那些文件移走了(“.c.exp”、“.lib”、“.obj”和“.pyd.manifest”),项目似乎仍在运行,性能仍保持在Cython级别 我对编译器的输出文件感到困惑,不确定什么是必要的,什么不是,我应该如何使用和处理它们

My setup.py:

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

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

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

Cython将每个
pyx
文件(您只有一个)编译为匹配
.C
文件中的C代码。它还可以发出其他文件,如HTML文件,以使C代码更具可读性,但默认情况下,这就是它提供给您的所有文件,您不需要任何额外的要求

Cython然后询问你通过C代码> dituTiLS配置的任何C编译器。在你的例子中,这是MSVC(微软Visual C++,C和C++编译器附带VisualStudio)-并且从这些代码< >代码> >代码>文件中建立一个<代码> .DLL<代码> /<代码> .Pyd<代码>文件。创建什么文件及其含义的完整细节取决于编译器版本,但基本上它会为每个

.c
文件创建一个
.obj
文件,然后创建一个
.lib
导入库和
.exp
导出库,以与
.dll
一起使用,和一个
.manifest
文件,该文件允许将库作为程序集加载

其中一些文件,特别是
.c
.obj
文件,在编译后的代码出错时,非常便于调试。(Cython生成的C代码可能非常难看,但原始机器代码可能更糟。)

所有这些文件都有助于在微小更改后更快地进行重建

如果您想做更复杂的事情,比如根据您的库链接其他库,也需要其中一些文件


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

Cython文档对此进行了解释,但这些都是Cython和C编译器生成的中间文件。如果您去掉它们,模块仍然可以工作,但是如果您更改了某些内容,则重建可能需要更长的时间,并且如果您需要调试某些内容,您可能没有任何C级调试信息可用,并且您可能无法构建需要与此模块共享代码的任何其他模块。如果你不在乎这些,那也不是问题。如果你想更好地理解,你需要阅读文档,然后问一个关于你没有得到的部分的更具体的问题。同时,你的第二个问题是一个完全不同的问题,所以请单独问。谢谢,我删除了第二个问题只是为了清楚通常我只在UAT之后部署pyc文件。关于您的“调试内容”,如果我想保持类似级别的回溯,我是否也应该在build/tmp.win32-2.7/Release下部署文件?如果是,我应该如何部署这些目录的层次结构?非常感谢,我现在有了更好的理解!