Welcome to A!Die Software Studio |
Python 的运行会依赖于 LIb 目录下的标准库文件, 对于嵌入使用来说这不太方便, 所以我们首先是要去掉 python 解释器对 Python 源代码的标准库的依赖. 其过程如下:
首先, 我们把 Lib 下的标准库删掉, 让解释器不依赖于标准库也可以运行.
1. 修改 pythonrun.c 第 257 行, 屏蔽这两行代码
if (!Py_NoSiteFlag)
initsite(); /* Module site */
2. 修改 unicodeobject.c 第 1194 行, 增加一个 cp936 的判断:
else if (strcmp(encoding, "mbcs") == 0 || strcmp(encoding, "cp936") == 0)
return PyUnicode_DecodeMBCS(s, size, errors);
3. 修改 unicodeobject.c 第 1306 行, 增加一个 cp936 的判断:
else if (strcmp(encoding, "mbcs") == 0 || strcmp(encoding, "cp936") == 0)
return PyUnicode_AsMBCSString(unicode);
做完上面的修改后, 重新编译, 解释器就可以不依赖于 Lib 目录下的 py 文件运行了.
去掉内建类型的文档可以减小解释器的大小, 方法是将 pyconfig.h 第 547 行附近的 #define WITH_DOC_STRINGS 1 注释掉
然后我去掉了一下的一些模块: cPickle, _io, datetime, _random, cStringIO, _lsprof, _collections, _struct, _sre, time, _locale, _headq, _functools, _weakref, itertools
去掉了这两个内建的对象: bytearray, memoryobject
最后编译出来的解释器 Release 版本小于 1M.
精简后的源代码: http://www.adintr.com/down/libs/minipython.rar