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

时间:2012-09-27 23:32:14

标签: python embedded

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

正如你可以猜到的那样,对于嵌入式设备而言,在交叉编译之后,Python大约只有1MB,这对我来说太过分了。

现在问题:

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

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

我使用gcc中的优化选项编译它,它已被剥离。

3 个答案:

答案 0 :(得分: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,函数,模块,类,生成器,装饰器和闭包
  • 支持29个关键字中的25个和来自Python 2.6的112个112字节码

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

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

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

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

答案 1 :(得分:3)

可能有一些方法可以通过配置,而不是更多来简化它。

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

我确信你没有使用更多实质性的功能,你可以通过解释器来减小尺寸。例如,您可能会抛出一大块解析器和编译器,只处理字节码。问题是,唯一的方法是破解翻译源。 (而且它不是世界上最美丽的代码,所以你将不得不花费大量的时间来学习你的方法。)而且你必须知道你实际上可以破解的功能。

另一个真正的替代方案是为类似Python的语言编写一个较小的解释器 - 例如,通过拾取tinypy项目。但是根据你的评论,除非它非常接近,否则“听起来像Python”似乎不够。

好吧,我想还有一个选择:破解与CPython不同的,更好的Python实现。问题是Jython和IronPython不是本机代码(虽然你可以使用JVM->本机编译器,或者可能将Jython塞进J2ME JVM中?),PyPy真的还没准备好进入黄金时段嵌入式系统。 (你能等几年吗?)所以,你可能会被CPython困住。

答案 2 :(得分:0)

我在2018年底偶然发现了这个问题。目前,最流行的微型python(以及专门为受限平台和嵌入式设备设计的微型python)是MicroPython,在微控制器等领域非常流行