引流
python编译|编译py|xp python|python库|python ssl|python.exe|python|python socket
写在前面
在实际开发中我们往往需要将python编译为我们程序的组件或者支持程序,所以我们需要自己编译一个python解释器。
编译python
下载py源代码
py是一个开源的解释语言,我们可以很容易下载到它的源代码:
python官网:http://Python源码下载
如果你需要编译的py可以在xp上运行,最新的可支持xp的python版本为 Python 3.4.4。
解压源代码并打开
找到解决方案位置
打开解决方案
此处可以设置生成平台,例如需要兼容xp。可以设置为141xp
测试编译文件
将生成的python_d.exe、python27_d.dll 文件放到一台无py环境的电脑,简单执行python -V测试
处理Python 标准库
执行简单py代码测试
编写pytest.py
print("hello word")
执行py文件,并未正常输出
添加py标准库
上图中并未执行成功,因为目前我们拥有了py解释器,但是py的标准库文件并不存在,因此库函数调用失败。
在源代码目录找到Lib目录,将其复制到实验机器的 python2.7.exe目录下
复制到目标位置之后再次执行py程序,结果正确。
编译和系统相关的py库
接上文,于是我们开开心心地执行一些py程序
再次出现错误,仔细查看Lib文件夹中也未发现_socket等文件。
回到py源码,查看是否有类似的字眼
恍然大悟,py除开封装的逻辑等库。底层的通信等库一定是和操作系统api相关的。
编译该库生成对应的库文件,后缀为pyd。将其放到DLLs目录。
之前缺少的库现在没有报错了。编译所有的库放到DLLs文件夹即可。
该处编译ssl后将pyd库文件放入DLLs,尝试再次运行。
Python 涉及文件的区别
格式 | 描述 |
.py | python 源文件 |
.pyc | pyc是源文件编译后的目标文件 |
.pyo | 源文件优化编译后的文件 |
.pyd | 是其他语言写的python库 |
只是对于这个模块的加载速度提高了,并没有提高代码的执行速度,通常情况下不用主动去编译pyc文件,文档上说只要调用了import model那么model.py就会先编译成pyc然后加载。
编译_ssl注意事项
编译openssl需要注意
可用的教程:windows 编译openssl
openssl源码:oepnssl源码下载
避坑点:
1、Perl 自己百度,到官网下一个win安装版的装上设置环境变量就行。
2、编译完成后_ssl依赖库设置的是ssleay.lib,项目自身好像是crypt.lib。