引流

        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。

windous重新编译python windows编译python_java


        解压源代码并打开

windous重新编译python windows编译python_java_02


         找到解决方案位置

windous重新编译python windows编译python_python_03


        打开解决方案

windous重新编译python windows编译python_python_04


         此处可以设置生成平台,例如需要兼容xp。可以设置为141xp

测试编译文件

        将生成的python_d.exe、python27_d.dll 文件放到一台无py环境的电脑,简单执行python -V测试

windous重新编译python windows编译python_python_05


处理Python 标准库

        执行简单py代码测试

                编写pytest.py


print("hello word")


                执行py文件,并未正常输出

windous重新编译python windows编译python_windous重新编译python_06


         添加py标准库

                上图中并未执行成功,因为目前我们拥有了py解释器,但是py的标准库文件并不存在,因此库函数调用失败。

                在源代码目录找到Lib目录,将其复制到实验机器的 python2.7.exe目录下

windous重新编译python windows编译python_java_07

                 复制到目标位置之后再次执行py程序,结果正确。

windous重新编译python windows编译python_python_08


编译和系统相关的py库

                接上文,于是我们开开心心地执行一些py程序

windous重新编译python windows编译python_服务器_09


                再次出现错误,仔细查看Lib文件夹中也未发现_socket等文件。

                回到py源码,查看是否有类似的字眼

windous重新编译python windows编译python_windous重新编译python_10


                恍然大悟,py除开封装的逻辑等库。底层的通信等库一定是和操作系统api相关的。

                编译该库生成对应的库文件,后缀为pyd。将其放到DLLs目录。

windous重新编译python windows编译python_服务器_11


                 之前缺少的库现在没有报错了。编译所有的库放到DLLs文件夹即可。

                该处编译ssl后将pyd库文件放入DLLs,尝试再次运行。

windous重新编译python windows编译python_java_12


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。

windous重新编译python windows编译python_java_13