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文件,并实现传参已完成

posted @   qiutian-hao  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示