当前位置:首页>python>DotNetPy:现代.NET 与 Python 互相操作的实战教程

DotNetPy:现代.NET 与 Python 互相操作的实战教程

  • 2026-09-02 19:34:58
DotNetPy:现代.NET 与 Python 互相操作的实战教程

在现代软件开发中,.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 配置繁琐、环境依赖复杂、跨平台兼容性差
  • 原生进程通信(IPC)编码量大、数据传输低效

DotNetPy 是基于现代.NET(.NET 6+/7+/8+)的轻量级互操作库,核心优势:

✅ 支持 Python 3.7+ 全版本,无缝对接 NumPy/Pandas/TensorFlow/PyTorch

✅ 跨平台(Windows/macOS/Linux),开箱即用无需复杂配置

✅ 双向调用:.NET 调用 Python、Python 调用.NET 均支持

✅ 自动类型转换(int/string/list/dict/ 对象直接互通)

✅ 轻量级无侵入,不污染项目环境

适用场景:

  1. .NET 后端 / 桌面应用调用 Python 做 AI 推理、数据分析
  2. Python 脚本调用.NET 封装的业务逻辑、数据库操作
  3. 混合开发:保留.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 内置自动类型转换器,无需手动处理数据格式:

.NET 类型
Python 类型
int/double
int/float
string
str
List<T>
list
Dictionary<K,V>
dict
自定义对象
Python 对象
bool
bool
DateTime
datetime.datetime
示例:对象互传
// 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 });

六、生产环境避坑指南(关键!)

  1. Python 环境一致性
    生产环境必须安装与开发一致的 Python 版本,依赖库用requirements.txt统一管理。
  2. 内存管理
    长时间运行的服务,建议使用Python.Shutdown()释放资源,避免内存泄漏。
  3. 路径问题
    部署时,.py 文件务必设置为始终复制到输出目录。
  4. 并发安全
    Python 解释器是单线程的,高并发场景建议使用进程池或异步调用。
  5. 依赖安装
    Python 第三方库直接用 pip 安装即可,DotNetPy 自动识别:
pip install numpy pandas tensorflow torch

七、总结:.NET + Python 混合开发的未来

DotNetPy 彻底打通了 .NET 与 Python 生态的壁垒,让两大主流技术栈无缝协同:

  • 用.NET 做稳定的架构、服务、桌面端
  • 用 Python 做 AI、数据分析、快速脚本
  • 一套方案解决双向调用,开发效率提升 10 倍

无论是企业级后端、AI 应用、桌面软件还是数据分析工具,DotNetPy 都是现代混合开发的最优解。

关键点回顾

  • 核心价值:DotNetPy 实现 .NET ↔ Python 双向无缝调用,兼容全版本生态
  • 环境搭建:仅需安装 NuGet 包,自动识别 Python 环境
  • 两大实战:.NET 调用 Python 脚本 / AI 模型、Python 调用 .NET 业务库
  • 核心特性:自动类型转换、跨平台、轻量级无侵入
  • 生产建议:统一环境、管理路径、注意内存与并发安全

【最后福利】关注回复‘’888‘’得最新最细相关源码资料:↓↓↓

--- 👇 技术交流/视频+课件源码/C#&上位机面试题库👇--- 

欢迎扫码添加,备注【888】

微信YDT2308

最新文章

随机文章