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

一次搞懂 DotNetPy:.NET 与 Python 互操作新范式

在企业级开发这块儿,.NET 在业务系统里是主力,Python 则在数据科学、机器学习那边称王。要是能把这两者结合,让 C# 应用直接调用 Python 那些丰富的生态(比如 pandas、scikit-learn),同时还能保持 .NET 工具链的清爽,那该多好。但现实是,现有的互操作方案要么依赖臃肿的运行时,要么不支持 .NET Native AOT,要么得折腾复杂的源生成器配置,用起来总是磕磕绊绊。

DotNetPy 就是为了填这个坑来的。它的 0.5.0 版本已经发布在 NuGet 上了,提供了一种轻量又现代化的 .NET 和 Python 互操作方案①。


什么是 DotNetPy?

DotNetPy(读作 “dot-net-pie”)是一个 .NET 库,能让 C# 直接执行 Python 代码。它把 Python 的 C API 封装了一下,提供了一套干净的托管接口,不需要外部脚本文件,也不用复杂的构建步骤。

来个完整的“Hello World”感受一下:

var executor = Python.GetInstance(); var temperatures = new[] { 23.5, 19.2, 31.8, 27.4, 22.1 }; using var result = executor.ExecuteAndCapture(@" import statistics result = {'mean': statistics.mean(data), 'stdev': statistics.stdev(data)} ", new Dictionary<string, object?> { { "data", temperatures } }); Console.WriteLine($"Mean: {result?.GetDouble("mean"):F1}°C ± {result?.GetDouble("stdev"):F1}");

这段代码直接在 C# 里内嵌了 Python 脚本,通过字典把 .NET 数组传进去,然后安全地把计算结果拿回来。全程不用建.py文件,也不用配项目,干净利落②。


为啥还需要一个新的互操作库?

虽说已经有 pythonnet、CSnakes、IronPython 这些方案,但它们都没跟上 .NET 2025+ 的发展节奏。DotNetPy 从三个根上重新设计,填补了空白:

1. 原生支持 Native AOT

DotNetPy 是目前唯一支持PublishAot=true的 .NET-Python 互操作库。这意味着你能构建完全自包含、不用 JIT 的 AOT 编译应用,而 pythonnet 和 CSnakes 都还不支持这个特性③。

2. 兼容 .NET 10+ 文件级应用

.NET 10 引入了“单文件脚本”模式(dotnet run script.cs),连.csproj都不用建。DotNetPy 从一开始就考虑到了这个场景:

# 直接跑,不用项目文件 dotnet run my-analysis.cs

这样一来,它就成了写脚本、做原型验证、搞轻量自动化的利器④。

3. 声明式 uv 集成

以前得手动管 Python 环境,老容易出“在我机器上能跑”的尴尬。DotNetPy 内置了对uv(一个高性能 Python 包管理器)的支持,可以在 C# 里直接声明环境依赖:

using var project = PythonProject.CreateBuilder() .WithProjectName("my-analysis") .WithPythonVersion(">=3.10") .AddDependencies("numpy>=1.24.0", "pandas>=2.0.0") .Build(); await project.InitializeAsync(); // 自动下载 Python、建虚拟环境、装包 var executor = project.GetExecutor(); executor.Execute("import numpy as np; print(np.mean([1,2,3]))");

就这么一次调用,环境就全准备好了,再也不用担心环境不一致的问题⑤。


和其他方案比比看

特性

DotNetPy

pythonnet

CSnakes

IronPython

Native AOT 支持

文件级应用

源生成器依赖

uv 集成

内置

支持

双向调用

C# → Py

C# ↔ Py

C# → Py

C# ↔ Py

学习曲线

极低

中等

DotNetPy 的目标很明确,就是针对C# 做主、Python 当工具的场景。要是你需要 Python 回调 .NET 对象,那 pythonnet 还是更合适的选择⑥。


内置安全机制

动态执行代码总得小心注入风险。DotNetPy 在编译期用 Roslyn 分析器帮你盯着潜在的危险:

// ❌ 分析器会提醒:用户输入直接当代码使,危险! executor.Execute(userInput); // ✅ 安全的做法:用户数据作为变量传进去 executor.Execute( "result = sum(numbers)", new Dictionary<string, object?> { { "numbers", userNumbers } } );

这么设计,安全的路子清晰明了,危险的操作一眼就能看出来⑦。


核心功能一览

  • 自动找 Python:跨平台检测装好的 Python;

  • 数据封送:.NET 的数组、字典、基础类型和 Python 之间能双向转换;

  • 变量管理:可以在 C# 里捕获、检查、删除 Python 变量;

  • 支持无 GIL:自动识别 Python 3.13+ 的--disable-gil构建;

  • 线程安全:自动管好 GIL,支持并发访问⑧。


快速上手

装 NuGet 包:

dotnet add package DotNetPy --version 0.5.0

初始化然后执行:

using DotNetPy; // 自动找 Python Python.Initialize(PythonDiscovery.FindPython()); var executor = Python.GetInstance(); var sum = executor.Evaluate("sum([1,2,3,4,5])")?.GetInt32(); Console.WriteLine(sum); // 输出:15

典型应用场景

  • AI/ML 集成:在 .NET 服务里调 scikit-learn、PyTorch 模型;

  • 数据分析脚本:内联执行 pandas/numpy 计算,不用单独起 Python 服务;

  • 自动化脚本:用 .NET 10 的文件级应用,给脚本配上 Python 能力;

  • 老系统改造:在现有 .NET 应用里慢慢引入 Python 功能⑨。


未来规划

接下来计划支持 Windows 嵌入式 Python(部署更简单),还会针对 AI 和数据科学做专门的优化。当前 v0.5.0 版本的 API 已经比较稳了,社区的反馈特别重要⑩。


技术生态关系图

这张图想说的是:DotNetPy 在 .NET 和 Python 生态之间,铺了一条轻量、现代化、C#主导的集成路,特别适合 .NET 当主应用、Python 当计算工具的场景。


最后说几句

DotNetPy 不是要取代所有 Python 互操作方案,而是给特定场景(Native AOT、脚本化、安全隔离)提供最优解。对于想在 .NET 里顺手用上 Python 数据科学生态的开发者来说,它确实是一条低摩擦、高安全的新路子。


参考资料

① DotNetPy GitHub Repository.Introducing DotNetPy. https://github.com/rkttu/dotnetpy
② Microsoft..NET 10 File-based Apps. https://learn.microsoft.com/en-us/dotnet/core/tutorials/file-scoped-apps
③ Microsoft.Native AOT in .NET 8. https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/
④ Astral.uv: A Fast Python Package Installer. https://docs.astral.sh/uv/
⑤ Microsoft.Security in .NET Source Generators. https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview
⑥ pythonnet.Python.NET Documentation. https://pythonnet.github.io/
⑦ Microsoft.Roslyn Analyzers for Security. https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/security-warnings
⑧ Python Software Foundation.Free-threaded Python (PEP 703). https://peps.python.org/pep-0703/
⑨ Microsoft.AI Integration in .NET. https://learn.microsoft.com/en-us/dotnet/machine-learning/⑩ Apache Software Foundation.Apache License 2.0. https://www.apache.org/licenses/LICENSE-2.0

http://www.jsqmd.com/news/510250/

相关文章:

  • Pixel Dimension Fissioner惊艳效果:技术博客→16-bit游戏攻略风格改写集
  • 嵌入式消息队列:轻量级事件驱动架构设计
  • cv_unet_image-colorization实战落地:社区文化站AI影像修复服务搭建
  • 从零开始构建智能问答机器人:AI Cookbook的终极指南
  • 【STM32】BLDC驱动优化实战 | 基于STM32F407与DRV8323的电流采样精度提升策略
  • Cowrie蜜罐性能监控:关键指标和故障排查指南
  • 从零开始理解DETR的Backbone:ResNet50与位置编码的完美搭配
  • 别再写爬虫了!用Trae平台5分钟搞定一个能聊天的网页数据抓取Agent
  • 2026年口碑好的心理测评系统公司推荐:心理测评系统设备/心理测评系统建设方案/心理测评系统管理平台精选公司 - 品牌宣传支持者
  • 选错方法后果多严重?参数vs非参数估计的7个真实业务场景对比
  • nlp_structbert_sentence-similarity_chinese-large模型文件结构与配置详解
  • CARIAD车载嵌入式控件库:面向TFT/GLCD的零分配增量渲染方案
  • AI原生应用未来趋势:模型蒸馏技术的发展方向
  • 终极Python SQL查询指南:Records库让数据库操作变得简单快速
  • 10分钟实现AI编程助手与Figma设计工具的无缝集成完整指南
  • 安卓手机端安装xapk、apkm软件!怎样安装xapk软件?安卓的apk和XAPK的区别?附教程
  • 2026年评价高的健康学校建设清单公司推荐:健康学校建设措施/健康学校建设仪器热门公司推荐 - 品牌宣传支持者
  • Qwen2.5-VL-7B-Instruct边缘部署探索:Jetson Orin NX适配可行性分析
  • TabNine插件评分与评论系统:如何选择优质AI代码补全扩展
  • 华大HC32开发环境搭建:从Keil到IAR的完整工程模板配置指南
  • Redis概率算法:HyperLogLog数学原理与高效基数统计实践
  • 用Nunchaku FLUX.1 CustomV3做社交配图:快速生成小红书/朋友圈爆款图片
  • GLM-4-9B-Chat-1M在网络安全领域的应用:日志分析与威胁检测
  • 企业官网和电商平台的本质区别是什么?
  • Phi-3-vision-128k-instruct Java开发环境搭建:从JDK17到IDEA一站式配置
  • PyTorch 2.8 强化学习镜像:5分钟搞定Gym+Stable-Baselines3环境,告别依赖地狱
  • 告别Input.GetTouch!Unity Input System实现移动端手势交互(单指旋转+双指缩放)
  • 2026年口碑好的usb转dc电源线工厂推荐:纯铜芯dc电源线实力工厂怎么选 - 品牌宣传支持者
  • 零门槛实战:Teable开源协作平台本地化部署全攻略
  • 如何通过Deep Lake实现AI模型可解释性:存储训练数据与预测结果关联分析指南