优化嵌入式Python解释器的大小

Ben*_*nny 17 python embedded

我花了最后3个小时试图找出是否可以在没有交互模式的情况下禁用或构建Python,或者我如何才能获得更小的python可执行文件的大小.

正如你可以猜到的那样是嵌入式设备,在交叉编译之后,Python的大小约为1MB,这对我来说太过分了.

现在的问题是:

是否有可能缩小Python可执行文件?也许要禁用交互模式(在命令行上启动Python程序).

我查找了配置选项并尝试了其中一些,但它不会对我的可执行文件产生任何更改.

我用gcc的优化选项编译它,它已经被剥离了.

mak*_*puf 5

如果你真的想缩小python,你可以看看那些项目:

http://code.google.com/p/python-on-a-chip/

如网站上所述:

Python-on-a-Chip(p14p)是一个开发简化的Python虚拟机(代号为PyMite)的项目,该虚拟机在没有操作系统的微控制器上运行Python语言的重要子集.p14p的其他部分是设备驱动程序,高级库和其他工具.请加入python-on-a-chip google小组讨论这个项目.

这可能比预期的要低一些,但它真的缩小了:

PyMite VM的功能:

  • 需要大约55 KB的程序内存
  • 初始化为4KB RAM; 打印"你好世界"需要5KB; 8KB是建议的最小RAM.
  • 支持整数,浮点数,元组,列表,dicts,函数,模块,类,生成器,装饰器和闭包
  • 支持Python 2.6中的25个关键字中的25个和112个112字节码中的89个

你可以从这个项目中获得有趣的想法.

请注意,您只能获得虚拟机,即.你可以运行pyc文件,而不是py.(pyc文件是跨平台的.比py文件小得多)

事实上,如果你真的针对最小的python,你需要禁用库的一部分,但也可能是编译器本身.

该网站也可能有一些有趣的提示:http://www.awaretek.com/pymo.html


aba*_*ert 3

可能有一些方法可以通过配置来将其压缩得更多一些,但仅此而已。

\n\n

另外,实际的交互模式代码非常简单,所以我怀疑你会在那里节省很多。

\n\n

我确信您还没有使用更多实质性功能,您可以从解释器中破解这些功能以缩小尺寸。例如,您可能可以扔掉大部分解析器和编译器,只处理字节码。问题是,做到这一点的唯一方法是破解解释器源代码。(它不是世界上最漂亮的代码,所以你必须花大量的时间来学习你的方法。)并且你必须知道你实际上可以使用哪些功能破解。

\n\n

唯一真正的替代方案是为类似 Python 的语言\xe2\x80\x94e.g. 编写一个更小的解释器,通过选择tinypy 项目。但从你的评论来看,听起来“类似 Python”对你来说还不够,除非它非常接近。

\n\n

好吧,我想还有一种选择:开发一种不同的、比 CPython 更好的 Python 实现。问题是 Jython 和 IronPython 不是本机代码(尽管也许您可以使用 JVM->本机编译器,或者可能将足够的 Jython 塞进 J2ME JVM 中?),而 PyPy 确实还没有准备好迎接黄金时期在嵌入式系统上。(你能等几年吗?)所以,你可能会被 CPython 困住。

\n

  • 与上述陈述+1。将 Python 装入 1Mb 已经是一项相当大的成就了。如果嵌入式设备上的空间如此紧张,我会考虑较小的替代品,例如 lua(声称适合小于 500kb) (3认同)