利用 Pythonnet 在 C# 中调用 Python 库的学习过程记录下来。
1、先打开VS 2022 ,创建一个控制台APP,选择 .Net 6.0。
2、在NeGet中搜索 “Pythonnet”,我选择了 “pythonnet_netstandard_py37_win” 版本。
3、由于选择了 py37_win 版本,那么就要安装 Python 3.7版本喽。
下载地址如下:
https://www.python.org/ftp/python/3.7.9/python-3.7.9-amd64.exe
当然要手动安装一下啦,可能需要重启系统。
4、返回 VS,录入代码如下。(基本是从 Pythonnet 官网复制过来的)
using Newtonsoft.Json;
using Python.Runtime;
//测试在C#中调用Python库的方法,首先要安装 python 3.7的release版本,否则报错。
{
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
dynamic sin = np.sin;
Console.WriteLine(sin(5));
double c = np.cos(5) + sin(5);
Console.WriteLine(c);
dynamic a = np.array(new List<int> { 1, 2, 3 });
Console.WriteLine(a.dtype);
dynamic b = np.array(new List<int> { 6, 5, 4 }, dtype: np.int32);
Console.WriteLine(b.dtype);
foreach (var item in a * b)
{
//这个是我加的,测试能不能序列化 dynamic 变量,然后再反序列为 int 类型
var js = JsonConvert.SerializeObject(item.ToString());
var m = JsonConvert.DeserializeObject<int>(js);
Console.WriteLine(m);
//也可以直接拆箱为 int
//var i = (int) item;
//Console.WriteLine(i);
}
Console.WriteLine(a * b);
Console.ReadKey();
}
}
结果如下:
1.0
-0.9589242746631385
-0.6752620891999122
int32
int32
6
10
12
[ 6 10 12]
注: 运行环境是 Windows 10 。