banner.gif adie's blog
主页 博客 胭脂泪,相留醉,几时重,自是人生长恨水长东
统计
日志总数: 127
评论总数: 123
日志分类
日志归档
最近日志
最近评论
订阅
rss2.gif

atom.gif

google_rss
yc.gif 【技术资料】 阅读 8169 次

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

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