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文件,并实现传参已完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)