PyPy/RPython能生成小型独立可执行文件吗?

27 投票
1 回答
6542 浏览
提问于 2025-04-16 07:29

(或者说,“能不能用 PyPy/RPython 把 Python 编译/转换成 C/C++ 而不需要 Python 运行时?”)

我试着去理解 PyPy 以及它的 RPython 和 Python,还有它的运行、编译和转换,但我有点搞不清楚。

我有一个假设的 Python 项目(在 Windows 上);我想把它的体积控制在大约一百千字节(O.N.O.),而不是使用 py2exe 后的几兆字节(即使经过 UPX 压缩)。我能用 PyPy1 以某种方式生成一个不依赖于 Python26.dll 的独立可执行文件吗?如果可以,它需要遵循 RPython 的限制,比如 for 只能在内置类型上工作,还是说可以用完整的 Python 语法?

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


1 (自从提问以来,情况变得更清楚了,这部分工具链更明确地被称为 RPython,而不是 PyPy;在 2010 年的时候并不是这样。)

1 个回答

18

是的,PyPy可以从RPython代码生成独立的可执行文件。这意味着你在写代码的时候需要遵循一些比较麻烦的RPython规则。你的Python代码很可能不能直接运行,想要把现有的Python代码移植过来通常也不是件轻松的事。虽然生成的可执行文件不会像C语言那样小,但比如说rpystone这个目标(来自pypy/translator/goal),在使用boehm垃圾回收后,64位的版本大约是80k,经过压缩处理。

撰写回答