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

定制 Python 嵌入 C++: (三) 定制 Python 模块

by adie
2011-06-26 18:15:42

    Python 源代码中工程众多, 其中大多是标准库的模块.  将 Python 用于嵌入时, 这些模块不一定都需要. 幸运的是定制这些模块非常的容易, 甚至都不需要重新编译源代码, 只需要把对应的二进制文件删除或拷贝到指定位置即可. 为了能够定制需要的模块, 我们需要先了解一下源代码中的各工程的功能, 以便能根据需要进行选择. 

    Python 源代码中的工程可以分为三类:

1. 编译辅助

    1. Solution Items 目录下的 getbuildinfo.c 文件. 该文件主要是从 SVN 的版本控制中提取版本信息, 对于不是从 SVN 中下载的代码来说没什么用.
    2. make_buildinfo 该工程编译后会生成一个工具 make_buildinfo.exe. 在 python 解释器编译之前会先调用这个工具来生成编译的版本相关信息.
    3. make_versioninfo 该工程编译后生成一个工具 make_versioninfo.exe. 运行它可以生成一份和版本号相关的头文件.
    4. kill_python 一个杀死 Python 进程的工具. 在编译前调用确保文件被有被使用.
    5. bdist_wininst 制作 Python 安装包的.

2. 解释器

    1. pythoncore Python 解释器的核心模块. 所有解释器功能都在这里. 编译为 python27(_d).dll
    2. python 命令行的 Python 解释器, 只是对 pythoncore 的 dll 文件的简单包装.
    3. pythonw 没有命令行窗口的 Python 解释器, 用于执行 UI 类的 Python 脚本. 可以避免弹出黑窗口. 也只是对 pythoncore 的简单包装.
    4. w9xpopen 为 Win9X 提供 os.popen 功能.

3. 内建库功能模块

    1. _bsddb 包装 Berkeley DB 的功能. 一个基于键值对的高效数据库.
    2. _ctypes 提供在 Python 中处理 C 类型的能力, 对于调用 dll 非常有用.
    3. _ctypes_test 一些关于 _ctypes 的测试函数.
    4. _elementtree 提供 XML 文档树结构的内建库.
    5. _hashlib 提供 OpenSSL 中的 HASH 算法.
    6. _msi 仅 Windows 平台, 为 Python 提供操作 msi 文件的功能.
    7. _multiprocessing 提供多进程通讯功能, 包括管道, 信号量等等.
    8. _socket 包装 socket 的功能.
    9. sqlite3  编译 SQLite3 引擎的工程.
    9. _sqlite3 包装了 SQLite3 数据库.
   10. _ssl 包装了 OpenSSL 的 SSL 通信功能.
   11. _testcapi 测试 Python 的 C API 的.
   12. _tkinter 包装 Tk 图形界面.
   13. bz2 包装了 bzip2 的数据压缩功能.
   14. pyexpat 提供 XML 解析功能.
   15. select 对 unix select API 的包装. 在 windows 上只对 socket 有用.
   16. unicodedata 提供对 Unicode 5.2 数据的访问.
   17. winsound 提供声音播放的功能.

我对 Python 的工程做了一个分类, 并删除了 Tk 图形库. 最后的 Python 工程如下:



所有 libmodule 下的工程都被编译为 DLL, 除 SQLite 本身的 dll 外, 其余 python 模块扩展名为 .pyd . 这些文件都可以单独拷贝使用, 只需要放到 PYTHONPATH 的路径中即可.

▲评论

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


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