我花了最后 3 个小时试图找出是否可以在没有交互模式的情况下禁用或构建 Python,或者如何使 python 可执行文件的大小更小。
你可以猜到它是针对嵌入式设备的,在交叉编译之后,Python 大约有 1MB 大,这对我来说太大了。
现在的问题:
是否有可能缩小 Python 可执行文件?也许要禁用交互模式(在命令行上启动 Python 程序)。
我寻找了配置选项并尝试了其中一些,但它不会对我的可执行文件产生任何更改。
我用 gcc 的优化选项编译它,它已经被剥离了。
如果你真的想缩小 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 虚拟机的特点:
你可以从这个项目中得到有趣的想法。
请注意,您只能获得虚拟机,即。你可以运行 pyc 文件,而不是 py. (不过,pyc 文件是跨平台的。而且比 py 文件小得多)
事实上,如果你真的以最小的 python 为目标,你需要禁用部分库,但可能还需要禁用编译器本身。
这个网站可能也有有趣的指针:http ://www.awaretek.com/pymo.html
可能有一些方法可以让你通过配置把它塞得更紧一点,但不多。
此外,实际的交互模式代码非常简单,所以我怀疑你会在那里节省很多。
我敢肯定,您没有使用更多实质性功能,您可以从解释器中破解以减小大小。例如,您可能会丢弃一大块解析器和编译器,只处理字节码。问题是这样做的唯一方法是破解解释器源。(而且它不是世界上最漂亮的代码,所以你将不得不花费大量时间来学习你的方法。)你必须知道你可以实际破解哪些功能。
唯一真正的替代方案是为类似 Python 的语言编写一个更小的解释器——例如,选择 tinypy 项目。但是从您的评论来看,除非它非常接近,否则听起来“类 Python”对您来说是不够的。
好吧,我想还有另一种选择:破解一个不同的、比 CPython 更好的 Python 实现。问题是 Jython 和 IronPython 不是本机代码(尽管也许您可以使用 JVM->native 编译器,或者可能将足够多的 Jython 塞进 J2ME JVM?),而且 PyPy 真的还没有准备好在嵌入式的黄金时间系统。(你能等几年吗?)所以,你可能被 CPython 困住了。
我在 2018 年末偶然发现了这个问题。此时,最流行的微型 Python——以及专为受限平台和嵌入式设备设计的微型 Python——是MicroPython,它在微控制器等产品中很受欢迎。