当前位置: 首页 > news >正文

本地window10同步ubuntu上conda指定环境,并在C#项目中通过Python.NET调用自定义python接口

需求:C#项目通过Python.NET方式调用自定义python接口

前提:确保ubuntu上的conda环境能正常运行你自定义的python代码

一、window10安装anaconda

如果你已经安装则跳过,如果没有安装则根据网上教程进行安装

可参考该教程:https://openai.wiki/anaconda-and-miniconda-windows-install.html

二、ubuntu通过使用Jupyter工具导出指定conda环境

如果没有Jupyter网上搜索教程进行安装并运行,这里只讲如何导出指定conda环境

ubuntu通过conda激活指定环境,比如我的是milvus,则命令如下

# 激活要导出的环境
conda activate your_env_name# 导出完整环境
conda env export > environment.yml

执行完导出命令后会在当前目录下看到environment.yml文件

三、window10同步环境

1、通过SCP命令从远程服务器复制environment.yml文件,我将该文件复制到我本地的

D:\study\NetPython下

其中root是账户,可以改成你自己的环境所属账户,192.168.0.156换成你的服务器IP,55899是我的ssh连接端口,也需要将端口换成你自己的

scp -P 55899 root@192.168.0.156:environment.yml D:\study\NetPython\

2、同步

# 1. 查看文件内容
type D:\study\NetPython\environment.yml# 2. 如果是conda环境
conda env create -f D:\study\NetPython\environment.yml
conda activate 环境名

同步成功后会在你的anaconda安装目录的envs,指定conda环境下生成相关文件

例如我的环境命名是milvus,以下是我同步环境后生成的示例

截至到这是演示同步python环境,下面开始演示C#项目中通过Python.NET调用自定义python接口,

将你自定义的.py代码放在如下所示目录

# test123.py
import math
import jsondef hello_world():"""简单的问候函数"""return "Hello from Python!"def add_numbers(a, b):"""加法函数"""return a + bdef calculate_stats(numbers):"""计算统计信息"""if not numbers:return {}return {"sum": sum(numbers),"average": sum(numbers) / len(numbers),"max": max(numbers),"min": min(numbers),"count": len(numbers)}def process_text(text):"""文本处理函数"""words = text.split()return {"word_count": len(words),"character_count": len(text),"uppercase": text.upper(),"words": words}class Calculator:"""一个简单的计算器类"""def __init__(self, initial_value=0):self.value = initial_valuedef add(self, x):self.value += xreturn self.valuedef multiply(self, x):self.value *= xreturn self.valuedef get_value(self):return self.valuedef reset(self):self.value = 0return self.value# 测试代码
if __name__ == "__main__":print(hello_world())print(add_numbers(10, 20))print(calculate_stats([1, 2, 3, 4, 5]))

用visual studio创建一个控制台应用程序,项目命名为NetPython的,选择.net8

Nuget导入pythonnet包

代码如下

Program.cs

using Python.Runtime;namespace  NetPython{public static class Program{static void Main(string[] args){var pythonHelp = new PythonHelp();pythonHelp.GetSatisRank();}}
}

PythonHelp.cs

using Python.Runtime;namespace NetPython
{public class PythonHelp{private static int Count = 0;static PythonHelp(){PythonHelp.Init();}public static void Init(){try{bool flag = !PythonEngine.IsInitialized;if (flag){string configValue = "C:\\Users\\Admin\\anaconda3\\envs\\milvus";Runtime.PythonDLL = Path.Combine(configValue, "python311.dll");PythonEngine.PythonHome = Path.Combine(configValue, "python.exe");string text = "";string[] array = new string[]{"tcl","DLLs","Lib","Lib/site-packages","Lib/site-packages/matplotlib/mpl-data/fonts/ttf","Lib/site-packages/win32","Lib/site-packages/win32/lib"};foreach (string text2 in array){text = string.Concat(new string[]{text,configValue,"/",text2,";"});}PythonEngine.PythonPath = text;PythonEngine.Initialize();PythonEngine.BeginAllowThreads();PythonHelp.Count = 0;}else{PythonHelp.Shutdown();PythonHelp.Init();}}catch (Exception ex){bool flag2 = PythonHelp.Count > 5;if (flag2){PythonHelp.Count = 0;throw new Exception("初始化重试次数过多,错误:" + ex.Message);}PythonHelp.Count++;PythonHelp.Shutdown();PythonHelp.Init();}}public static void Shutdown(){var gil = Py.GIL();if (gil != null) gil.Dispose();PythonEngine.Shutdown();}public void GetSatisRank(){using (Py.GIL()){dynamic myscript = Py.Import("test123"); // 导入你的Python模块(不带.py扩展名)dynamic result = myscript.add_numbers(6, 2); // 调用函数并传递参数Console.WriteLine(result); // 输出结果}}}
}

其中自定义代码为

点击运行进行测试

运行结果如下

http://www.dtcms.com/a/506962.html

相关文章:

  • 蕲春网站建设一个网站怎么优化
  • 实战:Python爬虫如何模拟登录与维持会话状态
  • 【完整源码+数据集+部署教程】【天线&化学】航拍图屋顶异常检测系统源码&数据集全套:改进yolo11-ContextGuided
  • Blender霓虹灯牌发光标志店招门牌生成器插件 Procedural Signs V2.0.0+预设包
  • LeetCode——二分(初阶)
  • 高端网站建设公司注意什么广告公司名字大全参考
  • 哈尔滨网站建设运营网站建设优化开发公司排名
  • Linux小课堂: 输入重定向与管道操作详解
  • AI+BI工具全景指南:重构企业数据决策效能
  • 全球云服务震荡:Amazon Web Services (AWS) 出现大规模故障 多项线上服务受冲击
  • 3.Rocky Linux 磁盘管理
  • led行业网站源码asp网站浏览器兼容
  • Linux基本指令(3)
  • TypeScript 快速入门与环境搭建
  • Python数据分析实战:基于PISA 2022金融素养数据集,解构“借衣服收2元”背后的青少年金钱观【数据集可下载】
  • 用TikZ绘制专业流程图:从入门到进阶(基于D3QN训练流程)
  • Java 反射机制实战:对象属性复制与私有方法调用全解析
  • 火星时代UE奶瓜粒子特效②
  • 网站制作流程图wordpress 维文版
  • MySQL与K8s:数据库运维新范式
  • 第9篇 opencv提取矩形角度不是很准确的处理方法
  • 检测十字标 opencv python
  • NSSCTF - Web | 【SWPUCTF 2021 新生赛】Do_you_know_http
  • Linux小课堂: 流、重定向与 cut 命令进阶
  • 虚拟内存核心常识
  • ubuntu配置mysql8.0并设置Navicat网络连接
  • 深圳网站维护一般多少钱网址大全黄免费片
  • 从若依框架看权限设计与数据字典:背后的工程化思考
  • 邦策网站建设平台网站建设文化咨询
  • ASTM D7033-2022 定向刨花板检测