A!die Software Studio Welcome to A!Die Software Studio

定制 Python 嵌入 C++: (六) 精简 Python 解释器

by adie
2012-07-13 16:41:44

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

 

 

▲评论

X 正在回复:
姓 名: 留下更多信息
性 别:
邮 件:
主 页:
Q Q:
来 自:
职 业:
评 论:
验 证:


Valid HTML 4.01 Strict Valid CSS!
Copyleft.A!die Software Studio.ADSS
Power by webmaster@adintr.com