工业落地之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

2、Demo操作

  • 第一步:点击“初始化Python环境”按钮;

  • 第二步:点击“执行Python”执行Python代码。

    四、附件

    1、Python环境文件

    test.rar

    2、Demo软件

    PythonDemo_Debug.rar

    3、Python源码

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值