前言
Python是一门强大的编程语言。特别的是,它还具有众多出色的库(例如numPy,sciPy,pandas等),可以显著简化和加速开发。因此,在解决某些问题时,通过 Python 实现可能是最理想的方式!
但是,我们又希望代码能在 C# 中运行。
那么,可以试试pythonnet
。
pythonnet
pythonnet
可以将 Python 代码集成运行在 .NET 4.0+ 的公共语言运行时(CLR)中。
需要注意的是,它并不是将 Python 代码编译成 IL 代码,而是将 Python 的 CPython 引擎与 .NET 运行时集成,以保证 CLR 可以使用现有的 Python 代码和 C-API 扩展,同时保持 Python 代码的本机执行速度。
Demo
1. 创建项目
创建一个控制台项目,引用 pythonnet Nuget 包。
注意,必须勾选“包括预发行版”,才能看到官方维护的 Nuget 包:
计算机上需要安装 Python 3
2. 初始化
需要先设置Runtime.PythonDLL
属性, 否则程序会抛出BadPythonDllException
:
具体文件位置对应你安装的 Python 版本和文件夹:
Runtime.PythonDLL = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),@"Programs\Python\Python310\python310.dll");PythonEngine.Initialize();
3. 使用 Python 库
所有对 python 的调用都必须在一个using (Py.GIL())
块中。
使用Py.Import
导入 python 模块后,你就可以正常调用对应的函数:
这里,我们使用了numpy
库(需要已经 pip install):
dynamic np = Py.Import("numpy");
Console.WriteLine(np.pi);
4. 使用 Python 脚本
我们也可以执行 Python 脚本代码。
首先,创建DemoCode.py
文件,定义了Demo
类和SayHello
方法,代码如下:
class Demo:def SayHello(self, name):return "Hello " + name
调用代码如下:
dynamic demoCode = Py.Import("DemoCode");
//实例化 Demo 类
dynamic demo = demoCode.Demo();
//调用 Demo 类的 SayHello 方法
Console.WriteLine(demo.SayHello("MyIO"));
最后,运行结果如下图:
结论
利用pythonnet
,在 C# 中运行 Python 代码就是这么简单!
添加微信号【MyIO666】,邀你加入技术交流群