我们前面用CTypes来调用python的时候,没有关注到Python的源码, 我们是通过生成动态链接库用API来直接访问内部的函数,这种方式灵活性很强。 但是如果我们要深入Python内部,包括做多线程处理的时候,就很难做了。 因为我们并没有调用Python的接口,并没有和python的虚拟机结合起来, 所以一些更深入的需求,就需要我们自己做扩展模块。 做扩展模块涉及到的问题是要调Python的源码,调用python源码直接用已安装好的也没有问题, 但是我们要调试跟进,这时候我们就要把python的源码编译一下,生成它的调试信息, 而且还要根据它的不同版本进行编译。
注意:扩展库一定要跟版本完全一致,它和`Ctypes`的引用方式不太一样。ctypes通过接口访问dll,而扩展库是将程序直接嵌入进去,会调用它自己的接口,而不同版本的接口地址是不一样的总之,做扩展库的第一步是将python的整个源码进行编译,编译完之后生成exe文件
python编译windows环境准备
先在python官网下载python源码,在Linux里面我们用gcc
或clang
,在windows中使用vs
编译。vs2015中包含win10SDK,
python依赖工具和库
- nuget python运行环境
- 其他依赖库源码 sqlite openssl zips ...
Python源码路径
PCbuild
项目路径(windows) 存放基于vs的项目文件和解决方案文件PCbuild/win32
编译输出externals
依赖工具和库Lib\site-packages
扩展库安装路径