Cython 是用于构建 C 代码还是用于构建 Python 扩展?

Posted

技术标签:

【中文标题】Cython 是用于构建 C 代码还是用于构建 Python 扩展?【英文标题】:Is Cython used for building C code or is it used for building Python extensions? 【发布时间】:2016-11-01 16:07:05 【问题描述】:

我是 C++/C# 开发团队中唯一的 Matlab 用户。我正在过渡到 Python,并希望 Cython 可以帮助我弥合我的工作和同事工作之间的差距。

我最初认为 Cython 可用于将 Python 代码编译为 C 源文件,可以然后从 Python 导入/调用。我希望从中获得两个好处:

    我的程序速度提升,并且 一个 C 源文件,可以交给我的同事进行一些 轻微 完善,然后最终在他们的 (C++/C#) 包中实现。

不幸的是,后者看起来不是一个选项,但我并不肯定。看起来 C 源文件非常臃肿,有很多对 Python 的引用。我有一个三行 Python 脚本,它声明一个 cdef char*,分配字符串“hello world!”到那个变量,然后打印它。生成的 C 文件有 2000 行长。

所以,我的问题是,Cython 是否无法获得好处 #2?使用 Cython 生成的 C 代码是否仅供 Python 使用,还是有办法消除 Python 膨胀并获得 Python 代码的简明 C 翻译?

【问题讨论】:

当您查看tag:cython 的信息选项卡时 >Cython 是一种用于快速生成 Python C 扩展的语言。 Nuitka 可能更合适,nuitka.net。但是我不明白你为什么需要 C。你想使用 Python DLL 吗?在 Python 中使用 C# 时,Iron Python 可能更适合:ironpython.net 认为他说他想为 C++ 项目编写 Python 代码,将其半自动翻译成等效的独立 C 或 C++ 代码。如果这确实是目标,那我就三个字:不,不,不。 您可以从 C/C++ cython.readthedocs.io/en/latest/src/userguide/… 调用 Cython。然而,它倾向于保留对 libpython 的依赖(除非你非常小心地让事情尽可能简单和键入) 您可能会争辩说 cython 是一种比 C++/C# 更好的源语言(更少的代码、大量的库等...),其他程序员应该将其视为更快进入市场的一种方式.您也可以尝试将一块大石推上山,这可能更容易。 【参考方案1】:

Cython 的输出不适合人类消费

Cython 将 C 视为一种中间语言,就像 LLVM 将 LLVM IR 视为一种中间语言一样。 Cython 的目的是产生 Python 扩展模块,而 C 正是为此目的最合理的手段。它通常会产生迷宫般的曲折的小预处理器指令,完全不可读。如果您想要可以阅读的 C 代码,则不应使用 Cython。

【讨论】:

以上是关于Cython 是用于构建 C 代码还是用于构建 Python 扩展?的主要内容,如果未能解决你的问题,请参考以下文章

使用PyInstaller构建Cython编译的python代码。

如何构建和分发依赖于第三方 libFoo.so 的 Python/Cython 包

Boost.python vs Cython 用于 C++/python 接口

用于构建蛋白质组学数据的Bash代码

将 Maven 用于 C/C++ 项目

尝试使用 Cython 和 Visual Studio 2019 (3​​2/64bits link.exe) 从 python 文件构建可执行文件时出错