c#调用python文档
一、背景说明
在项目落地过程中,有时候为了将算法应用到现场时,需要python算法工程师和上位机工程师相互协作,共同实现一些特定功能。因此,本文将详细介绍如何在C#中调用python脚本,并提供调试的案例。
二、环境说明
- Visual Studio 2023
- 框架:.NET Framework 4.8.1
- 依赖NuGet包:pythonnet 3.0.3
- 运行环境:Python 3.8
三、开发思路
- 明确双方版本一致;
1.初始化python环境;
Python动态链接库
var objArr = obj as object[]; #region python动态链接库 var files = Directory.GetFiles(objArr[0].ToString(), "python*.dll"); if (files.Length == 0) { throw new Exception("路径错误-未找到python动态链接库"); } var longfile = string.Empty; foreach (var file in files) { var temfile = System.IO.Path.GetFileName(file); if (temfile.Length > longfile.Length) longfile = temfile; } var dllPath = $"{objArr[0].ToString()}/{longfile}"; Runtime.PythonDLL = dllPath; #endregion
- 定义好python安装路径;
#region python执行文件所在目录 PythonEngine.PythonHome = objArr[0].ToString(); #endregion
- 定义好python模块搜索路径;
PythonEngine.PythonPath = objArr[1].ToString();
- 初始化python环境
// 初始化python运行时 PythonEngine.Initialize();
2.执行python文件;
加载Python文件
// Python代码 var pythonCode = string.Empty; using (var fs = new FileStream(PythonCodePath.Text, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (var sr = new StreamReader(fs)) { pythonCode = sr.ReadToEnd(); } }
执行Python代码
var objArr = obj as object[]; using (var gs = Py.GIL()) { dynamic pm = PyModule.FromString("cpython_test", objArr[0].ToString()); dynamic po = pm.DataClean("输出"); dynamic re = po.hello(); pythonOut = re.ToString(); }
3.Python调用示例
1、所需文件
Python安装环境路径
\配置文件\Python\Python38
Python安装环境库路径
\配置文件\Python\Python38\DLLs \配置文件\Python\Python38\Lib \配置文件\Python\Python38\Lib\site-packages
Python自定义库路径
\配置文件\Python\Dlls
Python执行文件路径
\配置文件\cpython_test.py