Python 的标准库内置了许多功能, 要完整的编译, 还需要一些第三方的开源代码. 下载的 Python 源代码包中并不包含这些第三方库, 需要手动下载. 在 Python 2.7.2 中用到的第三方开源代码及其版本如下:
- SQLite 3.6.21: 一个小型的嵌入式关系数据库, 官方网站 http://www.sqlite.org/. 编译 python 需要使用其合并的版本, 下载地址: http://www.sqlite.org/sqlite-amalgamation-3_6_21.zip
- Bzip 2-1.0.5: 一个数据压缩库, 官方网站 http://www.bzip.org/. 下载地址: http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
- Berkeley DB 4.7.25: 一个高性能的嵌入式键值数据库, 已被 Oracle 收购. 下载地址: http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz
以上代码下载后需要解压到和 Python 2.7.2 相同的目录, 其结构如下图所示:
然后进入 Python-2.7.2/PC/VS8.0 目录, 双击 pcbuild.sln 打开解决方案即可看到所有的项目. 如果这时进行编译, 会发现还有一些模块无法编译, 这需要一些开发包的支持. 如果不需要这些功能, 也可以不下载这些包, 编译的时候不编译对应的模块. 这些开发包包括:
- Tcl/TK 8.5: 跨平台界面库. 官方网站 http://www.tcl.tk. 编译 _tkinter 模块需要.
- OpenSSL: 开源 SSL 链接实现. 官方网站 http://www.openssl.org. 编译 _ssl, _hashlib 模块需要.
- Windows Platform SDK (选择自己的操作系统对应的). 需要使用里面的 msi.lib. 编译 _msi 模块需要.
要编译以上内容, 还需要其它工具的支持. 这些工具包括 ActivePerl, nasm 等, 可以直接搜索下载.
1. 编译 OpenSSL
从
http://www.openssl.org/source/ 下载 OpenSSL 的源代码 openssl-0.9.8l.tar.gz, 注意版本号需要为 0.9.8l . 解压后将其和 python-2.7.2 放到同一个目录. 编译 _ssl 或 _hashlib 模块, 如果出现类似以下错误提示
>Can not find a suitable PERL:
> the following perl interpreters were found:
>(' ', 'C:\\Perl\\bin\\perl.exe')
>(' ', 'C:\\perl\\bin\\perl.exe')
> None of these versions appear suitable for building OpenSSL
> Please install ActivePerl and ensure it appears on your path
>No Perl installation was found. Existing Makefiles are used.
可修改 Python-2.7.2/PC/VS8.0/build_ssl.py 文件, 注释掉如下两行:
即可.
如果还出现
#error : MDC2 is disabled.
#error : IDEA is disabled.
之类的错误, 可直接在对应报错的头文件中加入
#undef OPENSSL_NO_MDC2
#undef OPENSSL_NO_IDEA
等宏定义.
等 OpenSSL 编译完成后 _ssl, _hashlib 两个模块都可以编译了.
2. 编译 _msi
安装完 Windows SDK 后将其 lib 路径加入到 VC 的 lib 目录表中, 重新编译 _msi 模块. 如果编译出现 debugging information corrupt; recompile module 错误, 可在 VC
的 lib 路径设置中将 SDK 的路径移到最后. 或者去掉 SDK 路径, 只拷贝 msi.lib 文件到 VC 安装目录下的 lib 路径中.
3. 编译 TCL/TK
至此, Python 源代码项目中的所有工程应该已经可以成功编译了!
其中有一个被配置为跳过的工程为 bdist_wininst, 这个工程是用于构建 Windows 的 Python 安装包的, 不属于 python 解释器, 也不是 python 的模块.
最后, 我们需要测试一下编译的结果, 编译后的可执行文件都放在了解决方案目录下, 即 Python-2.7.2/PC/VS8.0 中. 要执行测试, 我们从命令行下进入这个目录, 执行以下命令:
.\python.exe ..\testpy.py
然后就可以看到测试的结果:
最后这里将成功编译的所有源代码整理了一下, 去掉了一些无用的文件后一起打包, 以方便下载:
Python_Src_Build_VC8.zip
注意里面只包含了 VC8 的工程文件, 其余的都已经被删除了.