【愚公系列】2023年5月如何用pythonnet在.NET CORE工具中实现跨语言调用?

2026-04-27 12:102阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计576个文字,预计阅读时间需要3分钟。

【愚公系列】2023年5月如何用pythonnet在.NET CORE工具中实现跨语言调用?

(文章目录)前言+Python.NET+是一个包,几乎给Python程序员提供与.NET公共语言运行时(CLR)和为.NET开发人员提供功能强大的应用程序脚本工具的能力。它允许Python代码与CLR交互,也可用于

(文章目录)


前言

Python.NET 是一个包,几乎给Python程序员 与 .NET 公共语言运行时 (CLR) 和 为 .NET 开发人员提供功能强大的应用程序脚本工具。它 允许 Python 代码与 CLR 交互,也可用于 将 Python 嵌入到 .NET 应用程序中。

Python.NET网址:github.com/pythonnet/pythonnet

一、C#和Python的融合调用

1.Python导入C#包

1、导入.NET Framework包

import clr from System import String from System.Collections import *

2、加载.NET Framework程序集

import clr clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form

3、导入.NET Core包

from pythonnet import load load("coreclr") import clr

2.在 .NET导入Python包

PythonEngine.Initialize(); using (Py.GIL()) { dynamic np = Py.Import("numpy"); Console.WriteLine(np.cos(np.pi * 2)); }

二、C#和Python的相关案例

1.Python调用C#

1、安装包

pip install pythonnet

2、C# 代码

using System; namespace TestDll { public class MyTest { public void Print() { Console.WriteLine("Hello world!!!"); } public void Print(string msg) { Console.WriteLine($"Hello {msg}!!!"); } public double Add(double x, double y) { return x + y; } } }

3、Python 代码

# coding:utf-8 import clr # 引用Dll,不需要添加后缀 clr.AddReference("TestDll") # TestDll是命名空间,MyTest是命名空间里定义的类 from TestDll import MyTest # 实例化类 instance = MyTest() # 无输入及无返回 instance.Print() # 有输入及无返回 instance.Print("qin") # 有输入及输出 add_data = instance.Add(1, 1) print(add_data)

2.C#调用Python

1、安装包

【愚公系列】2023年5月如何用pythonnet在.NET CORE工具中实现跨语言调用?

pythonnet

2、C#代码

必须将python文件夹下的dll复制到debug文件夹下,如果是自己的pyd包需要将pyd文件也放到debug文件夹下。

static void Main(string[] args) { PythonEngine.Initialize(); 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 = (double)(np.cos(5) + sin(5)); Console.WriteLine(c); dynamic a = np.array(new List<float> { 1, 2, 3 }); Console.WriteLine(a.dtype); dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32); Console.WriteLine(b.dtype); Console.WriteLine(a * b); Console.ReadKey(); } }

输出

1.0 -0.958924274663 -0.6752620892 float64 int32 [ 6. 10. 12.]

本文共计576个文字,预计阅读时间需要3分钟。

【愚公系列】2023年5月如何用pythonnet在.NET CORE工具中实现跨语言调用?

(文章目录)前言+Python.NET+是一个包,几乎给Python程序员提供与.NET公共语言运行时(CLR)和为.NET开发人员提供功能强大的应用程序脚本工具的能力。它允许Python代码与CLR交互,也可用于

(文章目录)


前言

Python.NET 是一个包,几乎给Python程序员 与 .NET 公共语言运行时 (CLR) 和 为 .NET 开发人员提供功能强大的应用程序脚本工具。它 允许 Python 代码与 CLR 交互,也可用于 将 Python 嵌入到 .NET 应用程序中。

Python.NET网址:github.com/pythonnet/pythonnet

一、C#和Python的融合调用

1.Python导入C#包

1、导入.NET Framework包

import clr from System import String from System.Collections import *

2、加载.NET Framework程序集

import clr clr.AddReference("System.Windows.Forms") from System.Windows.Forms import Form

3、导入.NET Core包

from pythonnet import load load("coreclr") import clr

2.在 .NET导入Python包

PythonEngine.Initialize(); using (Py.GIL()) { dynamic np = Py.Import("numpy"); Console.WriteLine(np.cos(np.pi * 2)); }

二、C#和Python的相关案例

1.Python调用C#

1、安装包

pip install pythonnet

2、C# 代码

using System; namespace TestDll { public class MyTest { public void Print() { Console.WriteLine("Hello world!!!"); } public void Print(string msg) { Console.WriteLine($"Hello {msg}!!!"); } public double Add(double x, double y) { return x + y; } } }

3、Python 代码

# coding:utf-8 import clr # 引用Dll,不需要添加后缀 clr.AddReference("TestDll") # TestDll是命名空间,MyTest是命名空间里定义的类 from TestDll import MyTest # 实例化类 instance = MyTest() # 无输入及无返回 instance.Print() # 有输入及无返回 instance.Print("qin") # 有输入及输出 add_data = instance.Add(1, 1) print(add_data)

2.C#调用Python

1、安装包

【愚公系列】2023年5月如何用pythonnet在.NET CORE工具中实现跨语言调用?

pythonnet

2、C#代码

必须将python文件夹下的dll复制到debug文件夹下,如果是自己的pyd包需要将pyd文件也放到debug文件夹下。

static void Main(string[] args) { PythonEngine.Initialize(); 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 = (double)(np.cos(5) + sin(5)); Console.WriteLine(c); dynamic a = np.array(new List<float> { 1, 2, 3 }); Console.WriteLine(a.dtype); dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32); Console.WriteLine(b.dtype); Console.WriteLine(a * b); Console.ReadKey(); } }

输出

1.0 -0.958924274663 -0.6752620892 float64 int32 [ 6. 10. 12.]