C#调用Python的函数(编译为pyd,避免源码泄露)
背景介绍:
在一个项目中,我需要在WinForm程序中调用一个图像高清化的Python代码。起初我想把Python代码用C#语言重写一遍,因为这段代码中只涉及了OpenCV和Numpy的一些调用,而这些包都可以找到对应的.Net版本,实现起来应该不难。可是时间有限,为了保证复现效果与原版代码完全一致,我决定通过C#去调用Python的代码。
实现效果:
将Python代码编译为pyd动态库,在C#中直接调用Python的函数,经过对比,代码执行效果和速度与Python环境中完全一致,pyd文件还避免了python源码的泄露。
实现步骤:
1. 在Python环境中安装Cython和setuptools。
2. 准备好需要打包的Python代码,并在同目录中创建setup.py,其代码如下:
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("需要编译的python文件名.py")
)
3. 在当前目录中运行
python setup.py build_ext --inplace
这里有两点需要注意:首先是电脑上必须要有C++的编译器,由于我是使用的VS,所以在VS中添加C++的工作负载即可。其次是被编译的python文件中空格和Tab不要混用,否则虽然代码可能在python环境中运行没有问题,但编译时会报错。