将脚本编译为pyd文件

Python虽然作为一种解释性语言,通常是使用解释器处理脚本的方式完成工作,但是也具有和很多其他诸如C、C#语言等类似的方式,可以将.py文件编译为*.pyd文件,即Python动态链接库文件。

关于动态链接库的优缺点这里就不展开细说了,具体介绍如何编译及使用。要将Python文件编译成.pyd文件,可以使用Cython,以下是基本的操作步骤。 

0. 环境准备

需要安装cython,这个使用pip就可以了:

pip install cython 

1. 脚本准备

例如,有一个自己实现的计算平均值函数,例如,中位值平均滤波法,也就是俗称的削峰均值滤波,脚本名称为myfunc.py,内容如下:

def my_mean(x:list):
    if len(x)<3:
        return None
    s=sum(x)-max(x)-min(x)
    return s/(len(x)-2)

编写完成以后,将脚本文件的后缀修改为.pyx,即文件名为myfunc.pyx

2. 编写构建脚本

新建一个setup.py的脚本文件,内容如下:

from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize("myfunc.pyx")
)

3. 构建pyd文件

通过命令:

python .\setup.py build_ext --inplace

编译成pyd文件,顺利的话,中间过程如下图所示:

第3步不顺利的话,一般会碰到这个出错提示:

Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools":

 https://visualstudio.microsoft.com/visual-cpp-build-tools/

这个通常的原因是缺少C++构建工具,详细的解决方案见如下链接:

https://blog.csdn.net/weixin_57344466/article/details/141201709

最后就会在相同文件夹下生成了一个名为myfunc.c的源文件和myfunc.cp312-win_amd64.pyd的文件,后者就是我们的目标pyd文件,后缀带有python版本信息和平台信息。

4. 文件测试

编写一个简单的Python脚本,例如tester.py:

# pyd文件测试
import myfunc
x=[-1,1,2,0,3]
k=myfunc.my_mean(x)
print(k)

输出结果为1.0,符合我们的预期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值