Python 作为一个流行的脚本语言, 在很多场合下都有应用. Python 本身支持嵌入其它语言中使用, 但是由于其功能强大, 体积也大, 嵌入时就显得有些笨拙. 因此, 嵌入时对 python 进行一些精简是很有意义的.
非常幸运, Python 是一个开源的软件, 完全可以随意定制. 由于 Python 本身是用 C 写的, 将其嵌入 C/C++ 程序里尤为方便. 并且可以利用 boost::python 库简化对语言的扩展.
我们首先要做的是下载 Python 的源代码, 可以从其官方网站下载, 我下载的版本是 2.7.2 . Python 的版本现在是 2.x 和 3.x 同时进行的. 3.x 由于语法更新较大, 不向后兼容, 很多库都还不支持. 所以我选择了 2.x 的最新版本 2.7.2 . (PS. 如果官方网站无法下载, 我在本地还提供了一个 rar 的压缩率更高一些的下载: Python 2.7.2 下载)
源代码下载后解压进入 python2.7.2 的目录, 可以看到文件和目录很多, 为了看起来清爽些, 我们先来做点清理:
- Demo 目录放的是一些使用 python 的各种演示, 你可以从里面学习 python 的用法和特性等. 我们先把它删除(不用担心, 如果你想找回删除的东西重新解压一下就是了).
- Doc 目录包含了 Python 的文档, 是 reStructuredText 格式的, 你可以把它编译成 HTML 文档或其它格式. 虽然 python 的网站上提供了编译好的这些文档, 但随时可能更新, 为了保留一份和这个版本的 python 兼容的文档, 手动编译一份是有用的. 不过我们现在还不打算做这件事情, 所以先把它剪切到其它地方去吧!
- Grammar 目录下是一份 Python 的语法描述. 保持和当前版本同步. 如果以后准备修改 Python 的语法, 首先就从这份文档开始, 所以将其保留.
- Include 目录, 包含了 python 相关的头文件, 如果你要用 C 写自定义模块来扩展 python, 你就要引用这个目录下的文件. 编译 boost::python 也需要这些文件. 当然, 编译 python 本身这些文件也是不可少的. 保留.
- Lib 目录, 包含 python 运行时的标准库, 这些库都是用 python 写的, 以后我们还会对其做处理. 先保留.
- Mac 目录, 包含 MacOSX 系统的一些特性和工具, 由于我的电脑不是 Mac 平台的, 删除.
- Misc 目录, 这里是一些乱七八糟的没地方放的东西: 文档, 工具, 历史等等, 意义不大, 删除.
- Modules 目录, 包含了所有用 C 语言编写的模块, 比如 ramdom, cStringIO 等. Modules中的模块是那些对速度要求非常严格的模块. 而有一些对速度没有太严格要求的模块, 比如 os, 就是用Python编写, 并且放在Lib目录下. 该目录需要保留.
- Objects 目录, 该目录中包含了所有 Python 的内建对象, 包括整数, list, dict 等. 同时, 该目录还包括了 Python 在运行时需要的所有的内部使用对象的实现. 保留.
- Parser 目录, 包含了 Python 解释器中的词法分析和语法分析. 另外还有一些相关的工具, 这些工具能够根据 Python 语言的语法自动生成 Python 语言的词法和语法分析器, 与YACC非常类似. 保留.
- PC 和 PCBuild 目录, 这两个目录包含了 PC 平台上编译 Python 的工程文件. Visual C++ 2008 (VC9) 的工程文件再 PCBuild 中, 其余 (VC6, VC7, VC8 等) 的在 PC 目录中. 由于我用的 VS2005, 故删除 PCBuild, 保留 PC 目录了.
- Python 目录: 该目录下包含了 Python 解释器中的编译和执行引擎, 是Python运行的核心所在. 需要保留.
- RISCOS 目录: 包含 RISC OS(一种移动设备的系统) 系统的相关文件, 删除.
- Tools 目录: 包含了一些在编译或扩展 python 时的有用的工具, 移到其他位置.
- configure, configure.in, Makefile.pre.in, pyconfig.h.in 是在 linux 下编译需要的文件, 删除.
- .hg_archival.txt, .hgtags 是版本控制系统的文件, 删除.
- install-sh, setup.py 是将编译好的 python 安装到系统里面的文件, 删除.
- LICENSE 是版本历史和许可协议文件, 删除.
- README 是对 python 的一些介绍, 各平台兼容性等等, 删除.
清理过后的最终源代码目录如下图所示: