【问题标题】:Use Cython as Python to C Converter使用 Cython 作为 Python 到 C 的转换器
【发布时间】:2011-10-30 01:55:49
【问题描述】:

我有巨大的 Python 模块(+8000 行)。它们基本上有大量的函数,用于通过串行端口通过读取和写入硬件寄存器与硬件平台进行交互。

它们不是数值算法。所以应用程序只是读/写硬件寄存器/内存。我使用这些库来编写自定义脚本。最终,我需要将所有这些东西移动到我的硬件上的嵌入式处理器中运行以获得更好的控制,然后我只需从 PC 启动事件,其余的都在硬件中。

所以我需要将它们转换为 C。如果我可以通过自动工具将我的脚本转换为 C,那将为我节省大量时间。这就是我被 Cython 吸引的原因。效率并不重要,我的代码不是数字处理器。但是生成的代码应该相对较小,以适应我有限的内存(几百千字节)。

我可以使用 Cython 作为我的自定义 Python 脚本到 C 的转换器吗?我的猜测是肯定的,在这种情况下我可以使用这些 .c 文件在我的硬件中运行吗?我的猜测不是因为我的硬件中也必须有 Cython 才能运行。但是如果只是创建一些 .c 文件,我可以通过并使其独立,因为代码没有使用 Python 的大部分功能,它只是将其用作快速实现脚本。

【问题讨论】:

  • 有没有人真正做到这一点?我觉得这很难调试。我真的很想自己用 Cython/PyPy 来做这件事,但这看起来测试起来可能很有趣......

标签: python c cython


【解决方案1】:
  1. 是的,这就是 Cython 的核心。但是...
  2. 您不需要 Cython,但是,您需要 libpython。您可能会觉得它没有使用那么多 Python 功能,但我认为如果您尝试这个,您会发现它不是真的——您将无法将您的程序与其对libpython 的依赖区分开来,同时仍在使用Python 语言。

另一个选项是PyPy,特别是translation toolchain不是 PyPy Python 解释器。它可以让您将 Python 语言的一个子集 RPython 翻译成 C。如果您确实没有使用许多 Python 语言功能或库,这可能会起作用。

PyPy 主要被称为 Python 的替代实现,但它也是一组用于将动态语言编译成各种形式的工具。这就是允许用 (R)Python 编写的 Python 的 PyPy 实现被编译为机器代码的原因。

如果 C++ 可用,Nuitka 是一个 Python 到 C++ 编译器,适用于常规 Python,而不仅仅是 RPython(这是 shedskin 和 PyPy 使用的)。

【讨论】:

  • 所以它是一个给你 .c 的翻译器?我认为是 python 的特定实现,以使其快速。快速不是我关心的问题。
  • 仔细阅读答案。 PyPy 是两件事,一个 Python 的实现,一个 Python 翻译器/编译器。你不想要第一个,你想要第二个。我链接的翻译工具链有你想要的细节。
  • @agf,我不知道如何将 python 程序(比如包含一行 i=1; print hello, 1 的 hello.py)转换为我可以在编辑器中查看并使用 gcc 编译的 c 源文件。如果您能帮我举个例子,我将不胜感激。
  • 您不使用 PyPy 将 Python 转换为 C。您使用专为此任务设计的 Cython。用户不想将 RPython 翻译成 C,这无论如何都是一种复杂的方法,而 Cython 提供了一个简单、清晰的路径。
  • @alcalde 我已经清理了这个(非常旧的)答案;你是对的,这是误导。
【解决方案2】:

如果 C++ 可用于该嵌入式平台,则有 shed skin,它将 python 转换为 c++。

【讨论】:

  • 我听说过 ShedSkin,但我不能相信它。Cython 似乎更强大,并且得到了非常积极的评价。
  • 对于 C++,还有 Pythran。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
相关资源
最近更新 更多