.NET怎么与Python交互 Python.NET库使用教程

来源:这里教程网 时间:2026-02-21 17:35:19 作者:

用 Python.NET,.NET 项目就能直接调用 Python 代码,反过来 Python 也能加载 .NET 程序集——关键在于正确安装、初始化和类型转换。

安装与环境准备

Python.NET 不支持所有 Python 版本和 .NET 运行时组合,务必匹配清楚:

推荐使用 Python 3.8–3.11(64位),对应 .NET 6 / .NET 7 / .NET 8(或 .NET Framework 4.7.2+) Windows 上 pip 安装最简单:pip install pythonnet Linux/macOS 需先装 Mono 或 .NET SDK,并设置 PYTHONNET_PYDLL_PATH 指向 libpython 和 libmono 若用 .NET 6+,确保项目启用 UseWpfUseWindowsForms(如需 GUI 互操作)

在 Python 中调用 .NET 类型

这是最常用场景:从 Python 脚本中创建 C# 对象、调用方法、处理事件。

先导入并初始化:import clr; clr.AddReference("System"); from System import String, DateTime 加载自定义程序集:clr.AddReference(r"C:\path\to\MyLibrary.dll"),然后 from MyNamespace import MyClass 注意类型转换:Python 字符串自动转为 System.String,但 list/dict 需手动转为 System.Collections.Generic.List[T] 调用泛型类要写全名,例如:List_string = clr.GetClrType(System.Collections.Generic.List[String])

在 .NET 中嵌入 Python 解释器

适合需要在 C# 应用里执行动态脚本、热重载逻辑或集成 AI 模型的场景。

立即学习“Python免费学习笔记(深入)”;

C# 中引用 Python.Runtime,用 PythonEngine.Initialize() 启动解释器 PythonEngine.Exec("x = 1 + 1")PythonEngine.Eval("2 ** 8") 执行代码 把 .NET 对象传给 Python:Py.Import("builtins").GetAttr("globals").SetItem("myobj", myDotNetObj) 回调 Python 函数到 C#?用 PyObject.Invoke 并确保参数类型兼容(如用 PyObject.As() 提取值)

常见问题与避坑提示

很多报错其实源于环境或生命周期管理不当:

“System.MissingMethodException”:多半是 .NET 版本不匹配,或调用了仅在高版本存在的 API “Cannot load assembly”:检查 DLL 是否有未满足的依赖(用 dotnet list packageDependencies.exe 查) 多线程下 Python.NET 默认不安全:C# 多线程调 Python 前必须调用 PythonEngine.AcquireLock() / ReleaseLock() 内存泄漏风险:Python 对象持有 .NET 引用时,避免循环引用;显式调用 Dispose()GC.Collect() 辅助清理

基本上就这些。不用封装 REST API 或启动子进程,Python.NET 让两边真正跑在同一个进程里——只要版本对得上、初始化到位、类型转得准,交互很自然。

相关推荐