python脚本打包成pyd文件:教程和简单的性能对比测试

最近在学习openCV发现,想查看源码时,发现程序是通过pyd格式的文件编译过的,于是去网上了解一下,pyd文件如何生成以及其作用。
作用有2方面:
1.安全性更高:通过pyd生成的文件,已变成了dll文件,无法查看源码,只能通过反汇编以后才能查看;
2.编译成pyd后,性能会有提升---(网上有的人说可以N倍提升),本人测试的代码提升约1倍,最后会有详细说明。

打包的过程:
1.安装打包的模块 pip install Cython
2.将要打包的脚本,放在非中文路径下,在路径下新增一个setup.py文件;
代打包的代码:

# -*- coding:utf-8 -*-
# @Time      :2020/4/17

import time


def sum_int():
    start_time = time.time()
    a = (x for x in range(4*10 ** 8))
    sum_int = 0
    for i in a:
        sum_int += i

    print(sum_int)
    print(f'cost_time:{time.time() - start_time}')


if __name__ == "__main__":
    sum_int()

setup.py文件内容

# -*- coding:utf-8 -*-
# @Time      :2020/4/20
from distutils.core import setup
from Cython.Build import cythonize

setup(
    name='tmp_debug',
    ext_modules=cythonize("tmp_debug.py"),
)

在命令行执行
python setup.py build_ext


image.png

在当前路径下会生成一个build文件


image.png

路径目录有点深,build后面会将整个目录结构再创建一遍(暂时没有去研究去掉的方法),生成的pyd文件,以脚本名(tmp_debug.*)开头,不可修改这个pyd文件的名称,否则无法正常使用
4.调用pyd文件:
将pyd文件当成是一个普通模块使用,通过import+模块名 调用

本例中的调用方法:


image.png

性能对比:
直接运行的用时:


image.png

通过pyd调用的用时:


image.png

通过pypy3调用tmp_debug.py文件的用时
image.png

结论:
对于纯计算代码,打包成pyd的性能与用pypy3调用近似,能提高约一倍的性能。

你可能感兴趣的:(python脚本打包成pyd文件:教程和简单的性能对比测试)