Python是一門強大的編程語言。特別的是,它還具有眾多出色的庫(例如numPy,sciPy,pandas等),可以顯著簡化和加速開發。因此,在解決某些問題時,通過 Python 實現可能是最理想的方式!
但是,我們又希望代碼能在 C# 中運行。
那麼,可以試試pythonnet
。
pythonnet
可以將 Python 代碼集成運行在 .NET 4.0+ 的公共語言運行時(CLR)中。
需要注意的是,它並不是將 Python 代碼編譯成 IL 代碼,而是將 Python 的 CPython 引擎與 .NET 運行時集成,以保證 CLR 可以使用現有的 Python 代碼和 C-API 擴展,同時保持 Python 代碼的本機執行速度。
創建一個控制台項目,引用 pythonnet Nuget 包。
注意,必須勾選“包括預發行版”,才能看到官方維護的 Nuget 包:
計算機上需要安裝 Python 3
需要先設置Runtime.PythonDLL
屬性, 否則程序會拋出BadPythonDllException
:
具體文件位置對應你安裝的 Python 版本和文件夾:
Runtime.PythonDLL = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.LocalApplicationData),
@"Programs\Python\Python310\python310.dll");
PythonEngine.Initialize();
所有對 python 的調用都必須在一個using (Py.GIL())
塊中。
使用Py.Import
導入 python 模塊後,你就可以正常調用對應的函數:
這裡,我們使用了numpy
庫(需要已經 pip install):
dynamic np = Py.Import("numpy");
Console.WriteLine(np.pi);
我們也可以執行 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】,邀你加入技術交流群