目前Python代码的执行过程是将Python代码转变成一行行指令,然后解释器解释指令的执行,调用到C代码层。如果去掉指令解释这个阶段,直接进入C代码层,效率就比较高了。而Cython库正好符合这种场景需求,将已有的Python代码转化为C语言的代码,并作为Python的built-in模块扩展。
Python的文件类型介绍:
.py python的源代码文件
.pyc Python源代码import后,编译生成的字节码
.pyo Python源代码编译优化生成的字节码。pyo比pyc并没有优化多少,只是去掉了断言
.pyd Python的动态链接库(Windows平台)
.py, .pyc, .pyo 运行速度几乎无差别,只是pyc, pyo文件加载的速度更快,不能用文本编辑器查看内容,反编译不太容易
Cython基本用法:
在使用Cython编译Python代码时,务必要安装C/C++编译器,本文使用Linux gcc 8.
安装Cython库
pip install Cython
编写一个测试代码文件hello.py
def say_hello():
print("hello world")
然后在同一目录下,新建一个setup.py文件,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("hello.py"))
cythonize()是Cython提供将Python代码转换成C代码的API,
setup是Python提供的一种发布Python模块的方法。
使用命令行编译Python代码:
python setup.py build_ext --inplace
test.c是test.py转化后的C代码文件,可以看到test.c非常大!!
test.pyd是python的动态链接库,我们在使用import test时会加载
build目录编译过程中生成的临时文件
调用
在python下执行以下命令
import hello
hello.say_hello()