在现代软件开发中,.NET 的强类型、高性能与 Python 的 AI 生态、数据处理、脚本灵活性形成了完美互补。无论是想用.NET 调用 Python 的机器学习模型、数据分析库,还是用 Python 调用.NET 的业务组件、桌面 / 后端服务,DotNetPy 都是当下最简洁、高效的跨语言互操作方案。
本文将从零到一,带你掌握.NET ↔ Python 双向调用实战,包含完整可运行代码、避坑指南和生产级最佳实践。
⭐️本文相关实战教程《学习资料》及源码在最下面,可直接得 ↓↓↓
一、为什么选择 DotNetPy?.NET + Python 生态强强联合
传统.NET 与 Python 交互(如Python.NET、IronPython)存在诸多痛点:
- IronPython 仅支持 Python 2.7/3.4,生态严重滞后
- Python.NET 配置繁琐、环境依赖复杂、跨平台兼容性差
DotNetPy 是基于现代.NET(.NET 6+/7+/8+)的轻量级互操作库,核心优势:
✅ 支持 Python 3.7+ 全版本,无缝对接 NumPy/Pandas/TensorFlow/PyTorch
✅ 跨平台(Windows/macOS/Linux),开箱即用无需复杂配置
✅ 双向调用:.NET 调用 Python、Python 调用.NET 均支持
✅ 自动类型转换(int/string/list/dict/ 对象直接互通)
✅ 轻量级无侵入,不污染项目环境
适用场景:
- .NET 后端 / 桌面应用调用 Python 做 AI 推理、数据分析
- Python 脚本调用.NET 封装的业务逻辑、数据库操作
- 混合开发:保留.NET 架构,复用 Python 成熟算法库
二、环境准备:1 分钟搭建开发环境
1. 基础环境要求
- .NET 环境:.NET 6 及以上(推荐 .NET 8)
- Python 环境:Python 3.8 及以上(需添加系统 PATH)
- 开发工具:Visual Studio 2022 / Rider / VS Code
2. 安装 DotNetPy NuGet 包
在你的.NET 项目中执行安装命令:
Install-Package DotNetPy# 或.NET CLIdotnet add package DotNetPy
3. 验证 Python 环境
DotNetPy 会自动识别系统 Python 环境,无需手动配置路径,执行以下代码即可验证:
using DotNetPy;// 初始化Python环境(全局仅需执行一次)Python.Initialize();// 输出Python版本Console.WriteLine($"Python版本:{Python.Version}");Console.WriteLine("环境搭建成功!");
三、实战一:.NET 调用 Python(最常用场景)
这是企业开发中最高频的用法:.NET 作为主程序,调用 Python 实现特定功能。
1. 基础调用:执行 Python 代码片段
直接在 C# 中执行单行 / 多行 Python 代码,无需独立.py 文件:
using DotNetPy;class Program{ staticvoidMain() { Python.Initialize(); // 1. 执行单行Python代码 Python.Execute("print('Hello from Python!')"); // 2. 执行多行Python代码 string pyCode = @"def add(a, b): return a + bresult = add(10, 20)print('计算结果:', result)"; Python.Execute(pyCode); }}
2. 进阶调用:调用独立 .py 文件(生产推荐)
实际项目中,我们会把 Python 逻辑写在独立文件中,方便维护。
步骤 1:创建 Python 脚本(test.py)
# test.py 放在.NET项目输出目录import numpy as np# 求和函数def python_sum(num_list): return sum(num_list)# 数组计算函数(使用NumPy)def numpy_calculate(arr): np_arr = np.array(arr) return np_arr.mean().item() # 返回平均值# 字符串处理def greet(name): return f"Hello, {name}! 来自Python的问候"
步骤 2:C# 调用 Python 脚本函数
using DotNetPy;class Program{ staticvoidMain() { Python.Initialize(); // 加载Python脚本 dynamic pyScript = Python.Import("test"); // 1. 调用基础函数 int sumResult = pyScript.python_sum(new[] { 1, 2, 3, 4, 5 }); Console.WriteLine($"列表求和:{sumResult}"); // 2. 调用NumPy计算函数 double avgResult = pyScript.numpy_calculate(new[] { 10, 20, 30, 40 }); Console.WriteLine($"数组平均值:{avgResult}"); // 3. 调用字符串函数 string msg = pyScript.greet("DotNetPy开发者"); Console.WriteLine(msg); }}
3. 高级场景:.NET 调用 Python AI 模型推理
DotNetPy 完美支持 Python AI 生态,以下是调用训练好的模型示例:
// C# 调用Python的机器学习预测Python.Initialize();dynamic aiModel = Python.Import("model_predict");// 传入特征数据,获取预测结果double[] features = new[] { 5.1, 3.5, 1.4, 0.2 };int predictResult = aiModel.predict(features);Console.WriteLine($"AI预测结果:{predictResult}");
四、实战二:Python 调用 .NET 代码(反向调用)
DotNetPy 支持双向通信,Python 也可以直接调用.NET 的类、方法、属性,复用.NET 业务逻辑。
1. 准备.NET 类库(封装供 Python 调用)
创建.NET 类库,编写业务代码:
// DotNetService.cspublic class DotNetService{ // 计算方法 publicintMultiply(int a, int b) { return a * b; } // 字符串处理 publicstringUpperText(string text) { return text.ToUpper(); } // 复杂业务:列表处理 public List<int> FilterPositive(List<int> numbers) { return numbers.Where(n => n > 0).ToList(); }}
2. Python 调用 .NET 类库
# python_call_dotnet.pyimport DotNetPy# 初始化.NET运行时DotNetPy.initialize()# 加载.NET程序集from MyDotNetLib import DotNetService# 创建.NET对象实例service = DotNetService()# 调用.NET方法print(service.Multiply(6, 7)) # 输出42print(service.UpperText("hello dotnetpy")) # 输出HELLO DOTNETPY# 传递列表,调用.NET业务方法nums = [1, -2, 3, -4, 5]positive_nums = service.FilterPositive(nums)print("正数列表:", positive_nums)
五、核心知识点:数据类型自动转换(无痛互通)
DotNetPy 内置自动类型转换器,无需手动处理数据格式:
// C# 定义对象public class User{ public string Name { get; set; } public int Age { get; set; }}// 传递给Pythonvar user = new User { Name = "张三", Age = 25 };Python.Execute("print(user.Name, user.Age)", new { user });
六、生产环境避坑指南(关键!)
- Python 环境一致性生产环境必须安装与开发一致的 Python 版本,依赖库用
requirements.txt统一管理。 - 内存管理长时间运行的服务,建议使用
Python.Shutdown()释放资源,避免内存泄漏。 - 路径问题部署时,.py 文件务必设置为始终复制到输出目录。
- 并发安全Python 解释器是单线程的,高并发场景建议使用进程池或异步调用。
- 依赖安装Python 第三方库直接用 pip 安装即可,DotNetPy 自动识别:
pip install numpy pandas tensorflow torch
七、总结:.NET + Python 混合开发的未来
DotNetPy 彻底打通了 .NET 与 Python 生态的壁垒,让两大主流技术栈无缝协同:
无论是企业级后端、AI 应用、桌面软件还是数据分析工具,DotNetPy 都是现代混合开发的最优解。
关键点回顾
- 核心价值:DotNetPy 实现 .NET ↔ Python 双向无缝调用,兼容全版本生态
- 环境搭建:仅需安装 NuGet 包,自动识别 Python 环境
- 两大实战:.NET 调用 Python 脚本 / AI 模型、Python 调用 .NET 业务库
- 核心特性:自动类型转换、跨平台、轻量级无侵入
- 生产建议:统一环境、管理路径、注意内存与并发安全
【最后福利】关注回复‘’888‘’得最新最细相关源码资料:↓↓↓
--- 👇 技术交流/视频+课件源码/C#&上位机面试题库👇---
欢迎扫码添加,备注【888】
微信YDT2308