PyPy/RPython 可以用来生成一个小的独立可执行文件吗?

Posted

技术标签:

【中文标题】PyPy/RPython 可以用来生成一个小的独立可执行文件吗?【英文标题】:Can PyPy/RPython be used to produce a small standalone executable? 【发布时间】:2011-05-14 05:03:44 【问题描述】:

(或者,“PyPy/RPython 是否可以用于将 Python 编译/翻译成 C/C++不需要 Python 运行时?”)

我试图通过它的 RPython 和它的 Python,它的运行和它的编译和它的翻译来理解 PyPy,但有些失败。

我有一个假设的 Python 项目(适用于 Windows);我想保持它的大小,大约为一百千字节(O.N.O.),而不是使用 py2exe 需要的几兆字节(在 UPX 之后)。我可以以任何方式使用 PyPy1 来生成不依赖 Python26.dll 的独立可执行文件吗?如果可以,它是否需要遵循 RPython 限制,例如 for 仅适用于内置类型,或者它是完整的 Python 语法?

我确实意识到,如果可以做到这一点,我几乎肯定不能直接使用 Python 中的 C 模块。


1(自从询问以来,情况变得更加清晰,工具链的这一部分被更明确地标记为 RPython 而不是 PyPy;2010 年并非如此.)

【问题讨论】:

这几乎肯定不会产生你想要的那么小的可执行文件,但由于它是相关的,我想我会指出 cython 声称它现在可以构建独立的可执行文件:wiki.cython.org/EmbeddingCython @Forest:我没有意识到 Cython 可以做到这一点,但由于需要 Python 运行时,我认为它不太可能(或至少很多)小于 py2exe + UPX。 【参考方案1】:

是的,PyPy 可以从 RPython 代码生成独立的可执行文件。这意味着,在编写代码时,您需要遵循所有尴尬的 RPython 规则。您的 Python 代码完全不可能开箱即用,并且移植现有的 Python 代码通常并不有趣。它不会使可执行文件像 C 一样小,但例如使用 boehm GC 的 rpystone 目标(来自 pypy/translator/goal)在剥离后在 64 位上是 80k。

【讨论】:

谢谢。这就是我想知道并期望得到的答案。与我忘记问的问题相关的第二个问题是,是否可以通过 PyPy 访问 Windows API? ctypes.windll 会起作用还是会更复杂? ctypes 在 RPython 中不起作用。有一个 C 接口,它被称为 rffi,grep 用于周围的用法(模块使用它)。这里和那里暴露了相当多的 Windows API,查看源代码(抱歉,这都是相当内部的东西,没有文档 ;-)

以上是关于PyPy/RPython 可以用来生成一个小的独立可执行文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql优化-分区

对函数深入了解

使用autoc js生成文章目录(侧边)导航栏

零散知识点

SharedPreferences工具类

SharedPreferences工具类