C#基于pythonnet调用Python的pyd文件,实现Python多个类调用并传参
1.Python实现
1.1、Add.py类实现加法计算

def add(x,y):
return x+y
1.2、Test.py类实现调用Add.py加法计算

import Add
def ShowNum(x,y):
print('和为:%d' % Add.add(x,y))
return Add.add(x,y)
if __name__ == "__main__":
ShowNum(2,3)
1.3、setup.py类实现pyd生成

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("Test.py"))
setup(ext_modules = cythonize("Add.py"))
2.生成pyd文件
在终端输入 python setup.py build_ext --inplace,然后按回车,如图所示


3.C#调用python的pyd文件
3.1、先在nuget下载对应的pythonnet版本(根据python版本选择)

3.2、C#代码实现
private void TestPython()
{
try
{
//python环境路径
string pathToVirtualEnv = @"H:\ProgramData\anaconda3\envs\python39";
Environment.SetEnvironmentVariable("PATH", pathToVirtualEnv, EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("PYTHONHOME", pathToVirtualEnv, EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("PYTHONPATH", pathToVirtualEnv + "\\Lib\\site-packages;" + pathToVirtualEnv + "\\Lib", EnvironmentVariableTarget.Process);
PythonEngine.PythonHome = pathToVirtualEnv;
PythonEngine.PythonPath = PythonEngine.PythonPath + ";" + Environment.GetEnvironmentVariable("PYTHONPATH", EnvironmentVariableTarget.Process);
PythonEngine.Initialize();
PythonEngine.BeginAllowThreads();
using (Py.GIL()) // 使用这个来包裹你调用python方法的代码
{
// 先引入python模块,也就是我们上面生成的pyd文件,如Test.cp39-win_amd64.pyd
dynamic my_module = Py.Import("Test");
// Call your python functions.
int value = my_module.ShowNum(5,21);
Debug.Write("[Debug]:" + value +"\t\n");
}
}
catch (Exception ex)
{
Debug.WriteLine("[ERROR]:" + ex.Message + "\t\n");
}
}

至此,c#调python的pyd文件,并实现传参已完成

浙公网安备 33010602011771号